Sun Feb 17 19:22:28 CET 2013

So what is a monad?

Focusing on the "do" notation, a way of looking at Monads is that the
"do" notation allows (almost?) any language based around the concept
of assigning values to names be embedded in a pure functional
language.  Essentially, the monad is an interpreter for a language.

Doesn't help, I know..  But was a big aha for me.

The reason why "do" is so weird is because it represents "the default
syntax" of many programming languages.

It makes much more sense to think of "composition of Kleisli arrows",
i.e. how do you chain a -> M b with b -> M c.  This composition makes
"sequencing" completely abstract, and "sequencing" is really nothing
more than "interpreting the instructions of a program".