ALGEBRAIC CODE • High confidence • Reusable abstractions (write once, run in many contexts) • Declarative, pure/concurrent safe code • More tools in your toolbox • Convenience • Well understood, principled, functional design patterns • Lenses, free monad + interpreter, DSLs • Unify similar concepts through abstraction • +/2, ++/2, <>/2, Map.merge/2, MapSet.union/2 have a lot in common (semigroup)