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 associativity: forall x y z. (x `mappend` y) `mappend` z = x `mappend` (y `mappend` z) _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe