The Road to Functional Programming

Educational material to learn functional programming in Scala, from scratch, in a structured and comprehensive way.

View project on GitHub

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