So far, we have learned about the basic building blocks of functional programming. It's time to take them for a spin and visit the world of software design focused on functions.
First, we will look at a way of changing our mindset from object-oriented programming (OOP) written in an imperative manner to function-centric design. To do so, we need to understand how to transform input data into the desired output data, preferably with the help of existing higher-order functions. Then, we will look at the Don't Repeat Yourself (DRY) principle and how we can use functional operations (partial application, currying, and functional composition) to remove certain types of duplication from our code. We will then look at the relationship between functions and classes, how we can group pure functions into classes if we want to switch a design from...