# Functor

In mathematics, specifically category theory, a **functor** is a mapping between categories. Functors were first considered in algebraic topology, where algebraic objects (such as the fundamental group) are associated to topological spaces, and maps between these algebraic objects are associated to continuous maps between spaces. Nowadays, functors are used throughout modern mathematics to relate various categories. Thus, functors are important in all areas within mathematics to which category theory is applied.

The words *category* and *functor* were borrowed by mathematicians from the philosophers Aristotle and Rudolf Carnap, respectively.^{[1]} The latter used *functor* in a linguistic context;^{[2]}
see function word.

Let *C* and *D* be categories. A **functor** *F* from *C* to *D* is a mapping that^{[3]}

That is, functors must preserve identity morphisms and composition of morphisms.

There are many constructions in mathematics that would be functors but for the fact that they "turn morphisms around" and "reverse composition". We then define a **contravariant functor** *F* from *C* to *D* as a mapping that

Note that contravariant functors reverse the direction of composition.

A **bifunctor** (also known as a **binary functor**) is a functor whose domain is a product category. For example, the Hom functor is of the type *C ^{op}* ×

*C*→

**Set**. It can be seen as a functor in

*two*arguments. The Hom functor is a natural example; it is contravariant in one argument, covariant in the other.

A **multifunctor** is a generalization of the functor concept to *n* variables. So, for example, a bifunctor is a multifunctor with *n* = 2.

One can compose functors, i.e. if *F* is a functor from *A* to *B* and *G* is a functor from *B* to *C* then one can form the composite functor *G* ∘ *F* from *A* to *C*. Composition of functors is associative where defined. Identity of composition of functors is the identity functor. This shows that functors can be considered as morphisms in categories of categories, for example in the category of small categories.

A small category with a single object is the same thing as a monoid: the morphisms of a one-object category can be thought of as elements of the monoid, and composition in the category is thought of as the monoid operation. Functors between one-object categories correspond to monoid homomorphisms. So in a sense, functors between arbitrary categories are a kind of generalization of monoid homomorphisms to categories with more than one object.

Let *C* and *D* be categories. The collection of all functors from *C* to *D* forms the objects of a category: the functor category. Morphisms in this category are natural transformations between functors.

Functors are often defined by universal properties; examples are the tensor product, the direct sum and direct product of groups or vector spaces, construction of free groups and modules, direct and inverse limits. The concepts of limit and colimit generalize several of the above.

Functors sometimes appear in functional programming. For instance, the programming language Haskell has a class `Functor`

where `fmap`

is a polytypic function used to map functions (*morphisms* on *Hask*, the category of Haskell types)^{[9]} between existing types to functions between some new types.^{[10]}