MonadPlus instance for ContT
John Wiegley
johnw at fpcomplete.com
Mon Jun 24 19:43:57 CEST 2013
>>>>> Ross Paterson <R.Paterson at city.ac.uk> writes:
> Alistair Lynn has proposed the following instance:
>
> instance (Monoid r, Monad m) => MonadPlus (ContT r m) where
> mzero = ContT $ const $ return mempty
> m `mplus` n = ContT $ \ c -> liftM2 mappend (runContT m c) (runContT n c)
>
> but this would also be possible:
>
> instance (MonadPlus m) => MonadPlus (ContT r m) where
> mzero = ContT $ const mzero
> m `mplus` n = ContT $ \ c -> runContT m c `mplus` runContT n c
>
> Is one of them better?
I would think that allowing ContT to transform any Monad over any Monoid has
more utility than only transforming another MonadPlus. But I have no real
world data to back this up, just a hunch.
--
John Wiegley
FP Complete Haskell tools, training and consulting
http://fpcomplete.com johnw on #haskell/irc.freenode.net
More information about the Libraries
mailing list