The foundation of functional programming is values, pure functions, and function composition; but this lean model of computation seems to abandon real-world concerns such as partiality, exceptions, logging, mutable state, and so on. This talk introduces FP from first principles and demonstrates how we recover the expressiveness of imperative programming without sacrificing the benefits of equational reasoning, via effects.
Presented at Scala Days 2018, New York.