[Haskell-cafe] Re: not possible with monad transformers ?
jules at jellybean.co.uk
Tue Nov 30 17:49:37 EST 2004
On 30 Nov 2004, at 20:55, Pavel Zolnikov wrote:
> Now I realize that as long as I am using liftM2 it is not possible
> to have history of errors from a and b - only form a. And as I moved
> to custom lift functions I realized I didn’t need monads in the
> first place.
It's not liftM2 that's the problem, it's rather the strategy of the
Maybe monad. The strategy of the maybe monad is very roughly 'abort on
error'. As you correctly observe, it doesn't make it at all easy to
collect error messages, let alone tree-shaped error graphs.
However, your problem *does* have a natural underlying monad, if you
care to use it. It's a kind of Error monad, but not the standard one,
since you would have to implement your chosen rules for combining
errors. I'm not quite sure exactly what you want, probably either a
list of errors, or a tree of errors, depending how much structure
you're trying to preserve.
You may not find the monad approach easier than just coding by hand,
though... although if you have a large amount of code, I would expect
monads to make it a bit shorter and clearer.
More information about the Haskell-Cafe