MonadPlus instance for ContT

Wolfgang Jeltsch g9ks157k at acme.softbase.org
Mon Jan 12 10:43:32 EST 2009


Am Sonntag, 11. Januar 2009 12:13 schrieben Sie:
> Wolfgang Jeltsch wrote:
> > Hello,
> >
> > I wonder why there isn’t a MonadPlus instance for ContT. In my opinion,
> > this
> >
> > one would be natural:
> >> instance (MonadPlus monad) => MonadPlus (ContT result monad) where
> >>
> >>     mzero = ContT $ return mzero
> >>
> >>     ContT cont1 `mplus` ContT cont2 = ContT $ liftM2 mplus cont1 cont2
> >
> > return and liftM2 are the ones of (->) (o -> monad result).
> >
> > What do you think?
>
> As long as it satisfies the MonadPlus rules.
>
> All of these:
>
>    mplus mzero a = a
>
>    mplus a mzero = a
>
>    mplus (mplus a b) c = mplus a (mplus b c)
>
>    mzero >>= k = mzero

Should all be satisfied.

> and one of these:
>
>    mplus a b >>= k = mplus (a >>= k) (b >>= k)

Should be satisfied.

>    mplus (return a) b = return a

Obviously not satisfied in general.

What has to be done to get such an instance into the libs?

Best wishes,
Wolfgang


More information about the Libraries mailing list