Chapter 2. Fundamentals of Functional Programming