On a journey into functional programming, a programmer will eventually stumble upon category theory. First off, let's just say that the study of category theory is not really needed to write better code. It's more prevalent in the internals of pure functional programming languages, such as Haskell and Idris, in which functions are pure and more like mathematical functions that do not have implicit side effects such as I/O and mutation. However, category theory helps us reason about a very fundamental and practical aspect of computation: composition. Functions in Clojure, unlike in pure functional programming languages, are quite different from mathematical functions as they can perform I/O and other side effects. Of course, they can be pure under certain circumstances, and thus concepts from category theory are still useful in Clojure for writing reusable and composable code based on pure functions.
Category theory can be thought of as a mathematical framework...