Category theory/Functor
From HaskellWiki
(command > common and) 

(One intermediate revision by one user not shown) 
Latest revision as of 07:23, 17 May 2009
Contents 
[edit] 1 Definition of a Functor
Given that and are categories, a functor is a pair of mappings (the subscripts are generally omitted in practice).
[edit] 1.1 Axioms
 If in , then in
 If in and in , then
 For all objects A in , id_{F(A)} = F(id_{A})
[edit] 1.2 Examples of functors
 , the functor giving the free monoid over a set
 , the functor giving the free group over a set
 Every monotone function is a functor, when the underlying partial orders are viewed as categories
 Every monoid homomorphism is a functor, when the underlying monoids are viewed as categories
[edit] 1.3 Functor operations
 For all categories , there is an identity functor (again, the subscript is usually ommitted) given by the rule F(a) = a for all objects and arrows a.
 If and , then , with composition defined componentwise.
These operations will be important in the definition of a monad.
[edit] 1.4 The category Cat
The existence of identity and composition functors implies that, for any welldefined collection of categories E, there exists a category Cat_{E} whose arrows are all functors between categories in E. Since no category can include itself as an object, there can be no category of all categories, but it is common and useful to designate a category small when the collection of objects is a set, and define Cat to be the category whose objects are all small categories and whose arrows are all functors on small categories.
[edit] 1.5 Functors in Haskell
Properly speaking, a functor in the category Haskell is a pair of a settheoretic function on Haskell types and a settheoretic function on Haskell functions satisfying the axioms. However, Haskell being a functional language, Haskellers are only interested in functors where both the object and arrow mappings can be defined and named in Haskell; this effectively restricts them to functors where the object map is a Haskell data constructor and the arrow map is a polymorphic function, the same constraints imposed by the class Functor:
class Functor f where fmap :: (a > b) > (f a > f b)