Summary of Functional Patterns
- Lazy execution
 - Algebraic Data Types
    
- Product
 - Sum
 
 - Newtypes
 - Typeclasses
 - Tagless final
 - Phantom types
 - Functors
    
- Covariant Functors
 - Contravariant Functors
 - Profunctors
 
 - Applicatives
    
- Validated
 
 - Semigroups
    
- Non empty list
 
 - Monoids
    
- String
 
 - Monads
    
- List
 - Option
 - Either
 - Reader
 - Writer
 - State
 - IO
 - ErrorMonad
 - Cont
 
 - Monad transformers
    
- ListT
 - EitherT
 - StateT
 - ReaderT
 
 - Comonads
    
- Store
 - Product
 
 - Free structures
    
- Monoids
 - Functors
 - Applicatives
 - Monads
 - Comonads
 
 - Trampolining
 - Lenses
 - Prisms
 - Continuation Passing Style
 - Type level programming