On further thought, better to use the Maybe afterall. You can use Nothing to signify your False and Just to signify your result.
case p1 s of Just result -> result Nothing -> case p2 s of ... That's probably more intuitive to what you were intending. Chris. On Wed, 21 May 2008, C.M.Brown wrote: > 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 > _______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users