https://dev.to/juaneto/knowing-monads-through-the-category-theory-1mea

While Mathematicians like to talk non-sensical abstract idea, Informaticians want to know how to apply the idea concretely:

**Mathematical Parlance**:

**Monad = ****Monoid**** +Endofunctor**

**Monoid = Identity + Associative**

**Endo-functor = functor between 2 ****same**** categories **

**IT Parlance:**

**Monad** is a ‘function’ to **wrap the ‘side effects’** (exception errors, I/O,… ) so that function composition in ‘**pipeline**‘ chained operation sequence is still possible in **pure** **FP** (Functional Programming, which forbids side-effects).

Some common Monads: ‘Maybe’, ‘List’, ‘Reader’…

This allows monads to simplify a wide range of problems, like handling potential undefined values (with the `Maybe`

monad), or keeping values within a flexible, well-formed list (using the `List`

monad). With a monad, a programmer can turn a complicated sequence of functions into a succinct pipeline that abstracts away additional data management, control flow, or side-effects.^{[2][3]}

__Exploring Monads in Scala Collections__