[Haskell] Better Exception Handling

Jules Bean jules at jellybean.co.uk
Tue Nov 23 12:33:15 EST 2004


On 23 Nov 2004, at 15:51, John Goerzen wrote:

> On Tue, Nov 23, 2004 at 04:30:21PM +0000, Keean Schupke wrote:
>> I am sure this discussion has happened before, but I think for pure
>> functions, returning Either Error Result is the way to go.
>
> That's certainly possible, but extremely tedious.
>

It sounds to me like the Either approach is what you are asking for, 
though?

You want:

catchJust :: (Exception -> Maybe b) -> (c -> a) -> c -> (b -> a) -> a

Can't you write:

catch :: (c -> Either Error a) -> c -> (Error -> a) -> a
catch code value handler =
   case code value of
     Right res -> res
   | Left e -> handler e

..or, to use the either idiom

catch code value handler = either (\res -> res) (\e -> handler e) (code 
value)

(the extension to catchJust is left to the reader)

The point is : the Either approach is the correct way to represent the 
notion of 'pure functional exceptions', you don't need language 
support: and you can build something that looks like language support 
as combinators?

Jules



More information about the Haskell mailing list