So I'm almost done teaching myself category theory. One of the main take-aways for me is that type constructors (higher-kinded types) are endo-functors.
But it this always the case? What's throwing me off is Haskell's Functor
typeclass:
class Functor f :: * -> * where
fmap :: (a -> b) -> (f a -> f b)
If all type constructors were a priori functors, there would be no need to define a special type-class. But I can't think of any type-constructors that fail to satisfy the Functor
type-class: product, sum, function, list, set, option, etc.
I also cannot imagine the utility of a type-constructors that is "one-half" of a functor, i.e. it has a map from objects to objects, but no map between morphisms.