[I reordered Joachim's sentences a bit]
Since this particular pattern is extremely abstract, many people waste
far too much time trying to understand the concept. Unfortunately,
nobody with enough knowledge and talent (and interest) has written a
good generally understandable explanation.
I think the ones on
http://haskell.org/bookshelf/#monads are quite good.
The problem is that the concept seems to be really difficult to grasp.
This depends on person - I bet there are people who (would) have no
problem with it (I am not one of them).
The important thing is that monads are really easy to use (use existing
ones, create your own ones) once you understand what's going on, and
they are not only a solution for IO in Haskell - they are really useful
as a programming tool.
(The best approximation that I have come up with is "a monad is what's a
pipe in Unix, only type-safe",
If pipes is all you want, using lazy lists and function composition will
be sufficient (and convenient).
I think you are missing a big part of the picture. Simple function
composition is only one of "computation combination strategies" possible
with monads.
but (a) I'm not sure that this is fully correct and
Not even correct for any concrete monad. Unix pipes are severly
constrained as a programming construct. They are only good for simple
processing of a single stream of data. You cannot name and duplicate
intermediate values (well, you could try to save files or fork streams,
but that wouldn't be what you mean by "unix pipes", and still wouldn't
suffice). What about recursion, looping, higher order functions,
closures and various side-effects supported by different monads. If
state is too easy, think about continuations, back-tracking, exceptions
and the ability to mix these effects using monad transformers? Do I want
the state changes to be rolled back when exception happens? Yes? No? No
problem, just compose monad transformers in a correct order.
(b) I'm pretty sure that this still isn't the full picture.)
You are correct.
The topic is vastly overrated.
Given that your understanding of monads is incomplete, I would take your
statement with a grain of salt.
They are just a specific Design Pattern.
One of the best.
Best regards
Tomasz