
On Wed, Dec 22, 2010 at 11:50 AM, Simon Marlow
This proposal is to replace forkIOUnmasked with forkIOWithUnmask:
+1 forkIOUnmasked was also difficult to wrap in my threads[1] library. I had to use the deprecated block and unblock operations to implement it: {-# OPTIONS_GHC -fno-warn-warnings-deprecations #-} -- For block and unblock forkIOUnmasked ∷ IO α → IO (ThreadId, IO (Result α)) forkIOUnmasked a = do res ← newEmptyMVar tid ← block $ Control.Concurrent.forkIO $ try (unblock a) >>= putMVar res return (tid, readMVar res) I don't need to use deprecated functions to wrap forkIOWithUnmask: forkIOWithUnmask ∷ ((∀ α. IO α → IO α) → IO α) → IO (ThreadId, IO (Result α)) forkIOWithUnmask io = do res ← newEmptyMVar tid ← mask_ $ Control.Concurrent.forkIOWithUnmask $ \restore → try (io restore) >>= putMVar res return (tid, readMVar res) Regards, Bas [1] http://hackage.haskell.org/packages/archive/threads/0.4/doc/html/Control-Con...