On 12 Nov 2014, at 23:33, Bardur Arantsson
wrote: Is the code for this available for inspection somewhere? (I realize it might change based on the outcome of this "poll", but...)
There's no complete patch, but I believe the outline has been sketched before, anyway to repeat it. The current implementation of bracket is as follows: bracket :: IO a -> (a -> IO b) -> (a -> IO c) -> IO c bracket before after thing = mask $ \restore -> do a <- before r <- restore (thing a) `onException` after a _ <- after a return r A new version would look like: bracket before after thing = mask $ \restore -> do let atomicAfter = uninterruptibleMask . after a <- before r <- restore (thing a) `onException` atomicAfter a _ <- atomicAfter a return r Slightly different versions are possible and the other relevant bracketing functions mentioned in this thread can be treated similarly. Cheers, Merijn