In functional programming, a functor is a design pattern inspired by the definition from category theory that allows one to apply a function to values inside a generic type without changing the structure of the generic type.
In Haskell this idea can be captured in a type class: This declaration says that any type of Functor must support a method fmap, which maps a function over the element(s) of the Functor.
Functors in Haskell should also obey functor laws,[1] which state that the mapping operation preserves the identity function and composition of functions: (where .
Functors are useful in modeling functional effects by values of parameterized data types.
Modifiable computations are modeled by allowing a pure function to be applied to values of the "inner" type, thus creating the new overall value which represents the modified computation (which might yet to be run).
fmap (+1)
to a binary tree of integers increments each integer in the tree by one.