
On Mon, May 16, 2011 at 4:41 PM, Gracjan Polak
Thanks Daniel, Yves and Edward for explanation. Two things come to my mind now.
1. It should be unified. Why? Because conceptually:
runIdentity (runErrorT (fail "msg")) :: Either String Int Left "msg"
and
fail "msg" :: Either String Int *** Exception: msg
Should be the same as Identity monad should not add structure.
ErrorT and Either are different types - I think it is okay that they are different. In some applications you might not want to silently discard pattern match failures.
2. I need a Failure monad that works well with pattern match failures (that call fail). I'd like to use it like this:
runErrorT $ do Active <- getStatus -- ensure proper status Just elm <- lookup stuff there -- lookup element when (condition) $ fail "wrong!" -- check condition return 1234 -- return useful value
sort of... Any ideas what could be used in place of Either monad? Basically I need working pattern match failures (I guess that means I need working fail method that is not equal to error).
ErrorT is a good choice for this. There is also the 'ExceptionT' monad transformer over here: http://hackage.haskell.org/packages/archive/exception-transformers/0.3/doc/h... Which you'll want to use with the exception-mtl package http://hackage.haskell.org/package/exception-mtl I don't have any experience with it, but from what I can tell those are the two choices already built. Antoine
-- Gracjan
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe