Higher-Order Functions
One of the most important concepts in programming is the notion of abstraction. Abstraction is the ability to reuse a common code pattern without having to repeat its details and by referring to it by name. Functions themselves are a fundamental form of abstraction. For instance, in the expressions 1+2 and 1+40, the common part is (1+). We can abstract over this common pattern by defining a function:
inc :: Integer -> Integer inc n = 1 + n
In this chapter, we go one step further by abstracting over these abstractions. Indeed, we allow functions to have other functions as parameters. Such functions are called HOF (HOFs). A HOF represents a whole family of different functions that have the same overall structure but differ in some of the details. Arguably, support for HOFs is one of the defining features of the functional programming paradigm. The typical concise nature of functional programs is often due to the judicious composition of HOFs, and a programmer...