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