
Ross Paterson
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