In this chapter, we turned a bit closer to theory and seeing how to use and implement data types from a functional point of view. We started with ways of defining function signatures, to help understand the transformations implied by the multiple operations we later met; then, we went on to define several containers, including functors and monads, and see how they could be used to enhance function composition, and finally we saw how functions could be directly used by themselves, with no extra baggage, to implement functional data structures.
As of now, in this book we have seen several features of functional programming for JavaScript. We started out with some definitions, a practical example, and then moved on to important considerations such as pure functions, side effects avoidance, immutability, testability, building new functions out of other ones, and implementing...