Antoine Latter aslatter at
Mon Nov 3 11:05:17 EST 2008

On Mon, Nov 3, 2008 at 9:34 AM, Jason Dagit <dagit at> wrote:
> Ah, but I had one more question that I don't think anyone has answered
> yet.  That is, how to deal with multiple types of exceptions.
> Suppose, as a concrete example, that I was looking out for both
> ExitCode and PatternMatchFail exceptions.  Maybe I'm being naive, but
> it seems like I'm in that situation again where I have to catch all
> and then check if fromException succeeds on either PatternMatchFile or
> ExitCode types.  And then throw if it both give Nothing?

I haven't tried this, so it may not work:

data MyException = MyArithException ArithException  | MyIOException
IOException deriving Typeable

instance Exception MyExcpetion where
  toException (MyArithException e) = toException e
  toException (MyIOExcpetion e) = toException e

  fromException se = case fromException se of
           Just e -> Just $ MyArithException e
           Nothing -> case fromException se of
                 Just e -> Just $ MyIOException e
                 _ -> Nothing

Then anyone can catch your exceptions by catching the ArithException
or IOException as normal, and you can catch IOExceptions and
ArithExceptions into your own custom type.


More information about the Glasgow-haskell-users mailing list