- Monads are defined by a simple trait with two methods: 'new' (or 'pure') and 'and_then' (or 'bind'), enabling generic sequencing of callbacks.
- Do notation (syntax sugar) for monads lets developers implement features like async/await, generators, and checked exceptions as library code rather than language built-ins.
- Algebraic effects generalize exceptions with resumable handlers, separating the declaration of side effects from their execution.
- Effects can be implemented efficiently in compilers via evidence passing or by translating effectful functions into coroutines.
- Both monads and algebraic effects are extremely powerful but risk ecosystem fragmentation if widely exposed as user-facing features; they are best implemented internally in the compiler and optionally exposed under an experimental flag.