>>12385Don't try to "understand" monads, because like many other abstracts constructs, they are -semantical- definitions. That means that they allow many implementations, which differ a lot in nature. It's like trying to define a "machine", it's not really useful.
In Haskell however they have a very practical side. You can see a progression.
- Type constructor : `F a` creates a context `F` with values of type a.
- Functor: You can apply functions inside this context.
f :: a -> b => fmap f :: F a -> F b
- Applicative: You can use in-context functions.
f :: a -> b => F f :: F (a -> b) => (<*>) F f :: F a -> F b
- Monad : You can apply functions with produces contexts inside contexts
f :: a -> F b => (=<<) f :: F a -> F b
Given this machinery, you can see their utility. But trying to reduce these concepts to a metaphor is just restricting their nature and utility.