On Mon, May 16, 2011 at 4:41 PM, Gracjan Polak <gracjanpo...@gmail.com> wrote: > > 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/html/Control-Monad-Exception.html#t:ExceptionT 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 > _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe