Compositions
- Nesting (implied higher-order functions)
- Currying and Partial application
- Threading, Piping (-> Clojure macro)
- Transducers (can be seen as a more mathematically pure -> macro)
Cathegory theory related
Commonly used:
- Monoid, Semigroup
- Zippers
- Functors, Applicative
- Monads
- Monad Transformers
More rare:
- Alternative
- MonadPlus
- Comonad
- Free Monoid
- Free Monad
- Church-encoded Monad
Popular Monads:
- List
- IO
- Maybe
- Either, Result
- Writer
- Reader
- Lazy
- State
Popular Transformers:
- ReaderT
- MaybeT
- StateT
- ...
Typesystem
Basic:
- ADT (Algebraic Data Classes)
- Typeclasses
- GADT (Generalized ADTs)
Advanced:
- Type Families
- Data Kinds
- Rank N types
- Linear types
- Phantom types
- Existential types
- Dependent types
- Refinement types
Architectural
- DSLs (possibly nested)
- Final Tagless
- Hierarchical Free Monads
Maximas:
- Make illegal state irrepresantable (implied usage of by ADTs)
- Imperative shell, functional core (bring IO to the edge of application)
Other
- Railroad programming (for dealing with errors on success and failed paths)
- Lenses (for working with deeply nested immutable data)