> On 12 Nov 2014, at 23:33, Bardur Arantsson <spam@scientician.net> 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
_______________________________________________
Libraries mailing list
Libraries@haskell.org
http://www.haskell.org/mailman/listinfo/libraries