
Daryoush Mehrtash wrote:
I am not sure I follow how the endofunctor gave me the 2nd functor.
As I read the transformation there are two catagories C and D and two functors F and G between the same two catagories. My problem is that I only have one functor between the Hask and List catagories. So where does the 2nd functor come into picture that also maps between the same C and D catagories?
You don't have a category List, you have the image of the List functor (in Hask). With the definition: data List a =... instance Functor List where fmap =... The type constructor "List" provides the object half of an endofunctor on Hask, and the function "fmap @List" provides the morphism half of the endofunctor. Now, if you declare another endofunctor, G: data G a =... instance Functor G where fmap =... then a natural transformation from List to G must provide a mapping (forall a. List a -> G a) for objects and a mapping (forall a b. (List a -> List b) -> (G a -> G b)) for morphisms, satisfying all the necessary laws. -- Live well, ~wren