Look how far we've gone in our understanding of functional programming! We learned about all of the building blocks—pure functions and lambdas—and about the operations we can use on them—currying, partial application, and functional composition. We also saw how the operations relate to one another and how we can use currying to implement partial application and vice versa. We also saw ways to implement currying in C++.
But our quest is just beginning. The next stop is—starting to use these constructs in more interesting contexts. It's time to tackle the difficult question—how exactly do we design with functions?