Proposal: Extensible exceptions

Simon Marlow marlowsd at gmail.com
Fri Jul 4 09:56:06 EDT 2008


Ian Lynagh wrote:

> This is a proposal to replace the current exception mechanism in the
> base library with extensible exceptions.

I'm generally in favour of this (of course) ...

> There's also
>     ignoreExceptions :: IO () -> IO ()
> which can be used instead of try for things like
>     ignoreExceptions (hClose h)
> (where we don't look at the result, so the exception type would be
> ambiguous if we used try). (I'm not sure if this is the best name for
> this function).

But I think we should omit ignoreExceptions completely, or at least 
strongly discourage its use.   (I mentioned this to Ian privately, he asked 
me to bring it up on the list).

The problem with discarding *any* exception is that it breaks modularity: 
for example, things like System.Timeout rely on being able to interrupt any 
computation by using a private exception.  Ignoring exceptions should 
always be limited to a particular class of exceptions that you want to 
ignore.  Existing uses of ignoreExceptions should be scrutinised very 
carefully.

In fact, this applies to catchAny too.  It should come with a strong 
warning, and a suggestion that any unrecognised exceptions should be 
re-thrown.  Most uses of catchAny are to implement an on-error action 
anyway, I think this ought to be provided as a combinator.  We have 
bracketOnError, but perhaps we should also have

    onException :: IO a -> IO b -> IO a

Cheers,
	Simon


More information about the Libraries mailing list