[Haskell-cafe] Re: Explaining monads

Benjamin Franksen benjamin.franksen at bessy.de
Mon Aug 13 16:29:37 EDT 2007


Brian Brunswick wrote:
> One thing that I keep seeing people say (not you), is that
monads /sequence/
> side effects. This is wrong, or at
> least a limited picture.
> 
> /All/ of the above structures are about combining compatible things things
> together in a row.
> /None/ of them force any particular order of evaluation - that all comes
> from the particular instance. So its
> only a particular feature of IO that it sequences the side effects. Others
> don't - we can have a lazy State
> monad that just builds up big thunks.

I am a bit astonished.

Let's take the simplest example: Maybe. The effect in question is the
premature abortion of a computation (when Nothing is returned). And of
course Maybe sequences these effects, that's what you use it for: the
_first_ action to be encountered that returns Nothing aborts the
computation. Clearly sequencing goes on here.

Similar with the Error Monad (i.e. Either Err, for some Err type).

I won't talk about List Monad because I always had difficulty understanding
the List Monad.

What about State? The effect is reading/writing the state. Again, the State
Monad takes care that these effects get sequenced, and again that's what
you expect it to do for you.

And so on...

This is -- of course -- not a proof, so maybe there /are/ Monads that don't
sequence (their) effects. I'd be most interested to see an example, if
there is one, to bring myself nearer to the -- unattainable -- goal of full
enlightenment wrt Monads.

Cheers
Ben



More information about the Haskell-Cafe mailing list