Following many protests, the right thing to do seems
to be to move MonadPlus to the Monad library. Specifically:
class Monad m => MonadPlus m where
mzero :: m a
mplus :: m a -> m a -> m a
filterM :: MonadZero m => (a -> m Bool) -> [a] -> m [a]
guard :: MonadZero m => Bool -> m ()
mfilter :: MonadZero m => (a -> Bool) -> m a -> m a
concatM :: MonadPlus m => [m a] -> m a
Alex, you'll have to use `mplus` instead of (++); or you
can define a new operator (+++) to mean `mplus`; or you can
hide the list (++) and redefine it to be `mplus`.
I guess that 95% of the mailing list is tired of MonadZero.
If anyone has further thoughts, pls send them to me only
(and, of course, any other individuals you like).
Simon