MonadPlus instance for ContT

Ross Paterson R.Paterson at city.ac.uk
Mon Jun 24 19:17:58 CEST 2013


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?



More information about the Libraries mailing list