[Haskell-cafe] Deprecation of MonadCatchIO-transformers

Arie Peterson ariep at xs4all.nl
Wed Nov 6 14:45:01 UTC 2013

Hi all,

As discussed before <http://www.mail-archive.com/haskell-cafe@haskell.org/msg104498.html>, the interface of the MonadCatchIO packages 
is effectively deprecated by the removal of the 'block' and 'unblock' functions 
in base-4.7. I would like to deprecate MonadCatchIO-transformers now.

As there are quite a few reverse dependencies, and as there is at least one 
use case that apparently cannot be migrated easily <http://www.mail-archive.com/haskell-cafe@haskell.org/msg104501.html>, I will try to keep the 
package functioning, for now.

In order to do this, I followed Edward Z. Yang's suggestion, and re-
implemented the IO instances of block and unblock, in terms of GHC primitives. 
The instance now reads

> import qualified Control.Exception.Extensible as E
> import GHC.Base (maskAsyncExceptions#)
> import GHC.IO (unsafeUnmask,IO(IO))
> instance MonadCatchIO IO where
>   catch   = E.catch
>   block   = \ (IO io) -> IO $ maskAsyncExceptions# io
>   unblock = unsafeUnmask

You can get a release candidate for a new version, by

darcs get http://patch-tag.com/r/AriePeterson/MonadCatchIO-transformers

I would be most grateful if someone could review and/or test this under GHC 



More information about the Haskell-Cafe mailing list