On Mon, Jul 26, 2010 at 5:02 PM, Edward Kmett <ekm...@gmail.com> wrote: > > On Mon, Jul 26, 2010 at 11:55 AM, John Lato <jwl...@gmail.com> wrote: >> >> Hello, >> >> I was wondering today, is this generally true? >> >> instance (Monad m, Monoid a) => Monoid (m a) where >> mempty = return mempty >> mappend = liftM2 mappend >> > There are multiple potential monoids that you may be interested in here. > > There is the monoid formed by MonadPlus, there is the monoid formed by > wrapping a monad (or applicative) around a monoid, which usually forms part > of a right seminearring because of the left-distributive law, there are also > potentially other monoids for particular monads. > > See the monad module in my monoids package: > > http://hackage.haskell.org/packages/archive/monoids/0.2.0.2/doc/html/Data-Monoid-Monad.html
I think your monoids package has grown since I last looked at it. I'll take a look. > >> >> Any resources for how I could develop a means to reason about this >> sort of property? > > The types are not enough. > > What you need is the associativity of Kleisli arrow composition and the two > identity laws. > > The three monad laws are precisely what you need to form this monoid. There > are analogous laws for Applicative that serve the same purpose. Thanks very much. With this and Henning's hints, I think I can make some progress with this now. John _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe