Dan Doel wrote:
If you do want to generalize (.), you have to decide whether you want to generalize it as composition of arrows, or as functor application. The former isn't a special case of the latter (with the current Functor, at least).

By annotating functors with the category they operate on, you can reconcile both seemingly different generalizations

   class Category (~>) => Functor (~>) f where
      (.) :: (a ~> b) -> (f a -> f b)

      -- functor application
   instance Functor (->) [] where
      (.) = map

      -- arrow composition
   instance Category (~>) => Functor (~>) (d ~>) where
      (.) = (<<<)


Regards,
apfelmus

_______________________________________________
Haskell-prime mailing list
Haskell-prime@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-prime

Reply via email to