Functors
A functor is one of those terms that comes from category theory in mathematics and causes a lot of pain to developers who come into functional programming and have less mathematical background. It is a requirement for monads, and here we will try to explain it in a way that would be easy to understand.
What is a functor? In the preceding section, we looked at monoids as a way to abstract some computation and then used them in different ways for optimization or to create more complex computations. Even though some people might not agree with the correctness of this approach, let's look at functors from the same point of view—something that will abstract some specific computations.
Note
In Scala, a functor is a class that has a map
method and conforms to a few laws. Let's call them functor laws.
The map
method for a functor of the F[T]
type takes a function from T
to Y
as a parameter and returns a F[Y]
as a result. This will become much clearer in the next subsection...