We reinvented Monads!
---------------------
A monad is a triplet `(M,⊙,η)` where
- \\(M\\) an Endofunctor (to type `a` associate `M a`)
- \\(⊙:M×M→M\\) a nat. trans. (i.e. `⊙::M (M a) → M a` ; `join`)
- \\(η:I→M\\) a nat. trans. (\\(I\\) identity functor ; `η::a → M a`)
Satisfying
- \\(M ⊙ (M ⊙ M) = (M ⊙ M) ⊙ M\\)
- \\(η ⊙ M = M = M ⊙ η\\)