On 04/07/10 11:12, Simon Marlow wrote:
It's possible to mis-use the API, e.g.
getUnmask = mask return
...incidentally,
unmask a = mask (\restore -> return restore) >>= (\restore -> restore a)
mask :: ((IO a -> IO a) -> IO b) -> IO b
It needs to be :: ((forall a. IO a -> IO a) -> IO b) -> IO b
so that you can use 'restore' on two different pieces of IO if you need
to. (alas, this requires not just Rank2Types but RankNTypes. Also, it
doesn't cure the loophole. But I think it's still essential.)
nonInterruptibleMask :: ((IO a -> IO a) -> IO b) -> IO b
nonInterruptibleMask_ :: IO a -> IO a
which is just like mask/mask_, except that blocking operations (e.g.
takeMVar) are not interruptible.
What would be an appropriate use of this?
-Isaac
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe