Final bikeshedding call: Fixing Control.Exception.bracket
Merijn Verstraaten
merijn at inconsistent.nl
Thu Nov 13 07:47:17 UTC 2014
> On 12 Nov 2014, at 23:33, Bardur Arantsson <spam at 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
More information about the Libraries
mailing list