Pragmatic Monad Understanding

The essence is composition of behaviour that can depend on the outcome of previous behaviour. Simple as that. All else is mostly irrelevant implementation detail. They do the same as applicatives, except that applicatives only model sequencing indepent computations whilst monads model sequencing dependent computations, and all independent computations can be expressed as dependent computations. This is why monads can be thought to model imperative programming where statements can depend arbitrarily on other previous statements, the difference being that statements do not compose and are thus harder to understand. This is also why monads and applicatives are semigroupal and monoidal functors. They make computations associative inside the functorial context and this is why composing becomes trivial

/r/functionalprogramming Thread Link - medium.com