[Haskell-cafe] Re: Are there standard idioms for lazy,
pure error handling?
Henning Thielemann
lemming at henning-thielemann.de
Mon Dec 7 14:31:22 EST 2009
Somehow I missed this thread. I want to say that I have implemented a general
way to add the information of an exception to the "end" of an arbitrary data
structure.
http://hackage.haskell.org/packages/archive/explicit-exception/0.1.4/doc/html/Control-Monad-Exception-Asynchronous.html
Duncan already mentioned it:
> data Exceptional e a = Exceptional {
> exception :: Maybe e
> result :: a
> }
> However it's pretty clear from the structure of this type that it cannot
> cope with lazy error handling in sequences. If you try it you'll find
> you cannot do it without space leaks.
Actually you spotted the space leak - but how is it pretty clear, that it
has the space leak? I wondered why 'unzip' does not have the space leak,
although when I sequence a lot of Exceptional values using mconcat, I'm
doing something pretty similar.
I also agree with you, that the possibility to access the result directly,
and thus easily ignore the exception is bad. I thought it could be
improved by removing the field accessors and instead provide the function:
switch :: (Maybe e -> c) -> (a -> c) -> Exceptional e a -> c
More information about the Haskell-Cafe
mailing list