
On Wed, Apr 22, 2009 at 03:14:03PM -0700, Daryoush Mehrtash wrote:
The Haskell Wikibooks also says the same thing:
Functors in Haskell are from Hask to func, where func is the subcategory of Hask defined on just that functor's types. E.g. the list functor goes from Hask to Lst, where Lst is the category containing only list types, that is, [T] for any type T. The morphisms in Lst are functions defined on list types, that is, functions [T] -> [U] for types T, U.
That's true, but not a particularly helpful view. Any functor F : C -> D can be viewed as a functor from C to the full subcategory of D on objects of the form F A for A an object of C. But then different functors map to different categories and you can't talk about natural transformations between them. Composing functors also becomes impossible. The simple view is that [], Maybe and Id are all functors from Hask to Hask. Then listToMaybe :: [a] -> Maybe a is a natural transformation from [] to Maybe, because fmap f . listToMaybe = listToMaybe . map f