David Benbennick wrote:
You mean (++) = mplus. I've wondered that too. Similarly, one should
define map = fmap. And a lot of standard list functions can be
generalized to MonadPlus, for example you can define
filter :: (MonadPlus m) => (a -> Bool) -> m a -> m a
Somehow this filter fails my intuition. Thanks to glguy on #haskell for
showing me that you can define it as
filter p m = m >>= \x -> if p x then return x else mzero
I want filter to commute with mplus:
(filter p m) `mplus` (filter p l) === filter p (m `plus` l)
This is true for lists, and seems to me a natural requirement for filter
to be considered, well, "a filter", along with the related filter p
mzero == mzero. Unfortunately many of the MonadPlus instances we have
don't satisfy that.
Jules
_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe