[Haskell-cafe] Taking Exception to Exceptions
mad.one at gmail.com
Wed Jan 7 18:32:59 EST 2009
Excerpts from Immanuel Litzroth's message of Wed Jan 07 16:53:30 -0600 2009:
> I'm trying to use the new (for me at least) extensible exceptions and
> I am little amazed that I cannot get catch, try or mapException to work
> without telling them which exceptions I want to catch.
> What is the rationale behind this?
The rational is that it's normally not a good idea to simply gobble
all exceptions; although the library makes it possible to do this
You can either use the ScopedTypeVariables extension and do:
... `catch` \(e::SomeException) -> ...
Or without an extension you can do:
... `catch` handler
where handler :: SomeException -> IO a
handler e = ...
(It's really a matter of taste if you want to use a non-haskell98
extension, although considering that the new extensible exceptions
library uses deriving data/typeable and existentials anyway, I think
ScopedTypeVariables are the way to go.)
> How does bracket manage to catch all exceptions?
> What should onException do?
onException takes an IO action and what to do if it fails - if the IO
action fails, it is caught and your 'failure action' is run, followed by
onException re-throwing the error.
> Is there some example code that uses these exceptions, or better
The GHC docs don't have source-code links (don't know why,) but
luckily in order to aid in using the new extensions system with older
GHCs there has been a hackage package uploaded that provides the
The source is here:
As for documentation e.g. haddock stuff, this is currently a bug as
there is none:
I recommend this paper for info, it's very easy to follow:
More information about the Haskell-Cafe