For me, the key to understanding monads was that monad is "a value
that know how to apply functions to itself". Or, more correctly, a
container that knows how to apply functions to whatever is inside it.
Before understanding this I read a lot of tutorials that presented
monads as computations, IO sequencing structures, side effects
encapsulation mechanisms, but it was a little bit too abstract, even
though now