1.3 Formulating Abstractions with Higher-Order Functions