[Haskell] Re: Better Exception Handling
Peter Simons
simons at cryp.to
Tue Nov 23 11:11:59 EST 2004
Bayley, Alistair writes:
> data SqliteException = SqliteException Int String
> deriving (Typeable)
> catchSqlite :: IO a -> (SqliteException -> IO a) -> IO a
> catchSqlite = catchDyn
> throwSqlite :: SqliteException -> a
> throwSqlite = throwDyn
I, too, think that's a good way to do it. And in the cases
where a custom data type seems to be overhead, I simply use
(fail "Foo.Bar: buffer overflow") and catch it with:
isBufferOverflow :: IOError -> Bool
isBufferOverflow e =
(isUserError e) && (ioeGetErrorString e == "FooBar: buffer overflow")
Once you have attributes for individual exceptions, defining
them for arbitrary groups of exceptions is trivial. And the
fact that I _use_ the message internally encourages me to
use clear and consistent error messages which also make
sense in case someone just 'show's them.
>> Python can work that way, but also adds another feature:
>>
>> try:
>> blah
>> moreblah
>> finally:
>> foo
> And in Haskell we have catch(Dyn), bracket, and finally.
> Are these not enough?
We also have Control.Exception.try. :-)
Peter
More information about the Haskell
mailing list