Because there are many monads for which you do not want this construction!

It isn't what you mean when you use mappend on [a] for sure! It is also different from the behavior for Monad, and it rules out those and many many other perfectly valid uses by overlap.

-Edward

On Mon, Jun 24, 2013 at 3:20 PM, John Wiegley <johnw@fpcomplete.com> wrote:
>>>>> Edward Kmett <ekmett@gmail.com> writes:

> The third construction is the 'universal' lifting that works for every
> Applicative, which would look like:

> instance (Monad m, Monoid a) => Monoid (ContT r m a) where
>   mempty = return mempty
>   mappend = liftM2 mappend

Why not then this?  That is, once AMP is out...

    instance (Applicative m, Monoid a) => Monoid (m a) where
        mempty  = pure mempty
        mappend = liftA2 mappend

--
John Wiegley
FP Complete                         Haskell tools, training and consulting
http://fpcomplete.com               johnw on #haskell/irc.freenode.net

_______________________________________________
Libraries mailing list
Libraries@haskell.org
http://www.haskell.org/mailman/listinfo/libraries