On Wed, 21 May 2008, HP Wei wrote: > > Suppose p1, p2, p3 are 3 predicates > that take an input -- say, a String. > They return either (True, result) > or False. > > I want to get an effect like in this expression: > > case p1 s of > (True, r) -> r > False -> case p2 s of > (True, r) -> r > False -> case p3 s of > (True, r) -> r > False -> none > > Is this a job for Maybe monad ? > How do I do that ? >
I think this is a job for the Either monad: data Either a b = Left a | Right b case p1 s of (Left (True, r)) -> r (Right False) -> case p2 s of (Left (True, r)) -> r (Right False) -> case p3 s of (Left (True, r)) -> r (Right False) -> none So you wrap up your (Bool, result) type using Left, and your Bool type using Right. Regards, Chris. > Thanks > HP > _______________________________________________ > Glasgow-haskell-users mailing list > Glasgow-haskell-users@haskell.org > http://www.haskell.org/mailman/listinfo/glasgow-haskell-users > _______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users