Robert Vollmert writes: | Hello, | | I've been having a little trouble writing a module that waits for and | handles IO events, e.g. by reading from a pipe. It seemed natural to | use some form of callbacks here, though that may very well be the | wrong approach. I'd be happy to hear of alternatives. | | Anyway, I got a callback-based approach to work to some extent, but | am not happy with the callback's type. :
Can the event and handler inhabit the same monad, say IO? If so, is the following the sort of thing you had in mind? waitAndHandleOneEvent :: IO e -> (e -> IO ()) -> IO () waitAndHandleOneEvent ioe h = forkIO (do e <- ioe h e) But then, because ioe and h always get combined the same way (ioe >>= h), we can generalise waitAndHandleOneEvent to waitAndDoOneThing :: IO () -> IO () waitAndDoOneThing io = forkIO io which is equivalent to using forkIO directly, as in do ... let ioe :: IO MyEvent ioe = ... h :: MyEvent -> IO () h e = ... forkIO (ioe >>= h) ... HTH. Tom _______________________________________________ Haskell-Cafe mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell-cafe