how do I abstract this pattern ?
C.M.Brown
cmb21 at kent.ac.uk
Wed May 21 13:02:48 EDT 2008
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 at haskell.org
> > http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
> >
> _______________________________________________
> Glasgow-haskell-users mailing list
> Glasgow-haskell-users at haskell.org
> http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
>
More information about the Glasgow-haskell-users
mailing list