[Haskell-cafe] monoids and monads

Henning Thielemann schlepptop at henning-thielemann.de
Tue Jul 27 03:32:02 EDT 2010

John Lato schrieb:
> Hello,
> I was wondering today, is this generally true?
> instance (Monad m, Monoid a) => Monoid (m a) where
>   mempty = return mempty
>   mappend = liftM2 mappend
> I know it isn't a good idea to use this instance, but assuming that
> the instance head does what I mean, is it valid?  Or more generally is
> it true for applicative functors as well?  I think it works for a few
> tricky monads, but that's not any sort of proof.  I don't even know
> how to express what would need to be proven here.

I translate 'valid' and 'true' to "Is 'm a' a Monoid, given that 'm' is
a Monad and 'a' is a Monoid?" If this is the question then we have to
show the Monoid laws for (m a), namely

left identity:   forall x. mappend mempty x = x
right identity:  forall x. mappend x mempty = x
   forall x y z.
      (x `mappend` y) `mappend` z = x `mappend` (y `mappend` z)

More information about the Haskell-Cafe mailing list