This chapter was dedicated to some of the functional programming theories that seem to put many people off pure functional programming. Because the majority of explanations require a strong mathematical background, we see people avoiding the concepts covered in this chapter.
We talked about monoids, monads, and functors, and we showed some examples of how to use them and the difference between having and not having them. It turns out that we use these concepts more often than we think, but we just don't realize it.
We saw that monoids, functors, and monads can be used for a variety of purposes—performance optimization, abstraction, and removal of code duplication. Properly understanding these concepts and feeling comfortable with them might take some time initially, but after some practice, developers tend to get a much better understanding and use them much...