Насколько я понимаю, функтор - это отображение между двумя категориями, например, от объектов в
к объектам в
, где
и
являются категориями.
В Haskell есть Hask, в котором объекты являются типами Haskell, а морфизмы являются функциями Haskell. Однако класс типов Functor имеет функцию fmap, которая сопоставляет эти типы (которые, таким образом, являются объектами, а не самими категориями):
fmap :: (a -> b) -> f a -> f b
f a и f b являются объектами в Hask. Означает ли это, что каждый экземпляр Functor в Haskell является endofunctor, и если нет, то Functor действительно представляет функтор?
Что мне здесь не хватает? Являются ли типы также категориями в Haskell?