
9 Apr
2009
9 Apr
'09
6:16 a.m.
On Thu, 9 Apr 2009 12:03:03 +0200
Quentin Moser
Here's an example inspired by the documentation of Control.Concurrent:
import Control.Concurrent import Control.Exception (finally)
myFork :: IO () -> IO (MVar ()) myFork a = do v <- newEmptyMVar a `finally` (putMVar v ())
myWait :: MVar () -> IO () myWait = readMVar
Oops, my code is completely messed up. Here's a correct version:
myFork a = do v <- newEmptyMVar forkIO $ a `finally` putMVar v () return v
myWait = readMVar >> return ()