Simon Marlow wrote:
> but they are needlessly complicated, in my opinion. This offers the
> same functionality:
>
> mask :: ((IO a -> IO a) -> IO b) -> IO b
> mask io = do
> b <- blocked
> if b
> then io id
> else block $ io unblock
How does forkIO fit into the picture? That's one point where reasonable
code may want to unblock all exceptions unconditionally - for example to
allow the thread to be killed later.
timeout t io = block $ do
result <- newEmptyMVar
tid <- forkIO $ unblock (io >>= putMVar result)
threadDelay t `onException` killThread tid
killThread tid
tryTakeMVar result
regards,
Bertram
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe