[Haskell-cafe] Commutative monads vs Applicative functors

Bruno Oliveira bruno.oliveira at comlab.ox.ac.uk
Wed May 14 04:00:51 EDT 2008


On 14 May 2008, at 02:06, Ronald Guida wrote:

> I have a few questions about commutative monads and applicative  
> functors.
>> From what I have read about applicative functors, they are weaker  
>> than
> monads because with a monad, I can use the results of a computation to
> select between alternative future computations and their side effects,
> whereas with an applicative functor, I can only select between the
> results of computations, while the structure of those computations and
> their side effects are fixed in advance.
> But then there are commutative monads.  I'm not exactly sure what a
> commutative monad is, but my understanding is that in a commutative
> monad the order of side effects does not matter.
> This leads me to wonder, are commutative monads still stronger than
> applicative functors, or are they equivalent?

I would say that they are stronger because they still support:

concat :: Monad m => m (m a) -> m a


(>>=) :: Monad m => m a -> (a -> m b) -> m b

which are not supported, in general, by applicative functors.

In fact, I would probably risk to say that they are even stronger  
than monads
(as there are less commutative monads than regular monads).

> And by the way, what exactly is a commutative monad?

Here is a possible characterization:

The monad m is commutative if, for all mx and my:

do {x <- mx; y <- my; return (x,y)} = do {y <- my; x <- mx; return  

As you mentioned above, the basic idea is that the order of the side  
does not matter. This law is not true in general for monads.

I am not sure if you know about the paper entitled "The essence of the
Iterator Pattern" (by Jeremy Gibbons and myself):


But, you may be interested to read it as it discusses related ideas. In
particular you may want to take a look at Section 5.4.


-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/haskell-cafe/attachments/20080514/bbc23f03/attachment-0001.htm

More information about the Haskell-Cafe mailing list