A Monad is implemented as a type constructor “M” with two operations:
- fn unit : a → M(a)
- Wraps a plain value into the monadic context
- fn bind : M(a) → (a → M(b)) → M(b)
- Unwraps the value, applies a function that produces a new wrapped result
- This is what enables Monadic Chaining