--------
A **functor** is a "homomorphism", that is, a structure-preserving mapping, between categories. In particular, a functor `F` from category **C** to category **D** must:
+<pre>
(i) associate with every element C1 of **C** an element F(C1) of **D**
(ii) associate with every morphism f:C1->C2 of **C** a morphism F(f):F(C1)->F(C2) of **D**
(iii) "preserve identity", that is, for every element C1 of **C**: F of C1's identity morphism in **C** must be the identity morphism of F(C1) in **D**: F(1<sub>C1</sub>) = 1<sub>F(C1)</sub>.
(iv) "distribute over composition", that is for any morphisms f and g in **C**: F(g o f) = F(g) o F(f)
+</pre>
A functor that maps a category to itself is called an **endofunctor**. The (endo)functor that maps every element and morphism of **C** to itself is denoted `1C`.