In the previous chapter on monads, we saw how a lot of the functions we’ve been writing for different data types and combinator libraries can be expressed in terms of a single interface, Monad. Monads provide powerful functionality, as we’ve seen by the fact that we can use flatMap to write what seems like an imperative program in a purely functional way.
In this chapter, we learn about a related abstraction, the applicative functor, which is less potent than the monad but more general (and hence more common). The process of arriving at applicative functors also provides some insight into discovering such abstractions, and we use some of these ideas to uncover another useful abstraction, the traversable functor. It may take some time for the full significance and usefulness of these abstractions to sink in, but you’ll see them popping up again and again in your daily work with functional programming if you pay attention.