On Mon, Feb 20, 2006 at 05:10:02PM -0800, Iavor Diatchki wrote: > On 2/20/06, John Meacham <[EMAIL PROTECTED]> wrote: > > I think the problem is that 'mzero' exists, the correct solution seems > > to be to get rid of the 'mzero' method of MonadPlus. Since haskell is > > lazy, all Monads have at least the zero of _|_ which can be overriden by > > 'fail' with a more suitable one. MonadPlus should be about extending > > monads with an additive operator, there is no need for another concept > > of zero and it seems to me that is the real issue. mzero can simply be > > defined as 'fail "mzero"'. > > In what sense is _|_ a 'zero'?
Ah, Sorry, I meant to say that every monad in haskell has a natural 'failure' and by the zero-as-failure model has a natural mzero too. However that does weaken my argument if there are examples of monads where having failure and zero be distinct is a useful thing. Consider my argument weakened appropriatly. In any case, treating a map lookup as a 'failure' rather than a 'zero' does make more sense to me independent of this and the need for error messages. Actually, sort of on this note, I would like to see 'mempty' separated out of the Monoid class... If we had class aliases ideally it would be something like: class MEmpty a where mempty :: a class MAppend a where mappend :: a -> a -> a class alias Monoid a = (MEmpty a,MAppend a) where mconcat = foldr mappend mempty not that I am seriously suggesting class aliases for haskell'. First a few well tested implementations need to appear which I doubt will happen before haskell' is well on its way. John -- John Meacham - ⑆repetae.net⑆john⑈ _______________________________________________ Haskell mailing list Haskell@haskell.org http://www.haskell.org/mailman/listinfo/haskell