When explaining monads to beginners (having an imperative background), I found myself to say that there is roughly three "groups" of monads (because they're always worried about their cost, i.e. their incidental complexity):
- Function-oriented monads (e.g. State, Reader, Cont)
- Reductible data-oriented monads (e.g. Maybe, Identity, Writer)
- Irreductible data-oriented monads (e.g. List, free monads) (which, as I understood, have a (>>=) operation that has a quadratic complexity if not used properly)
Are there others "groups" I'm missing and is there terms to formalize them?