Functor (functional programming)

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).

Applying fmap (+1) to a binary tree of integers increments each integer in the tree by one.