[Haskell-cafe] Catch multiple exceptions using 'Control.Exception'

Nikita Karetnikov nikita at karetnikov.org
Wed Jul 3 12:47:20 CEST 2013

I'm trying to update a package that uses 'Control.OldException' (works
with GHC 6.10.4).  Here is a relevant (and simplified) part:

import Control.OldException

-- | A predicate matching synchronous exceptions.
syncExceptions :: Exception -> Maybe Exception
syncExceptions (AsyncException _) = Nothing
syncExceptions e                  = Just e

throwAsync :: IO a
throwAsync = throwIO $ AsyncException StackOverflow

throwArith :: IO a
throwArith = throwIO $ ArithException DivideByZero

'syncExceptions' is usually used like this:

*Main> tryJust syncExceptions throwArith
Left divide by zero
*Main> tryJust syncExceptions throwAsync  -- pass through
*** Exception: stack overflow

The above doesn't work with GHC 7.6.3 because 'Control.OldException' [1]
was removed.  And 'Control.Exception' doesn't have the 'Exception' type.

Is there a way to adapt 'syncExceptions' to work with

[1] http://hackage.haskell.org/packages/archive/base/
-------------- next part --------------
A non-text attachment was scrubbed...
Name: not available
Type: application/pgp-signature
Size: 835 bytes
Desc: not available
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20130703/c7cb405e/attachment.pgp>

More information about the Haskell-Cafe mailing list