Вы можете уточнить, спрашиваете ли вы о «функторах в Haskell» или Functor
s. Не всегда понятно, какую категорию предполагается использовать, когда термины теории категорий используются в Haskell.
Но да, предположение по умолчанию - Hask , которое принимается за категорию типов Haskell с функциями в качестве морфизмов. В этом случае endofunctor F в Hask будет отображать любой тип A в тип F (A), а любую функцию f между двумя типами A и B в функцию F ( f ) между некоторыми типами F (A) и F (B).
Если затем мы ограничимся только теми эндофункторами, которые отображают любой тип a
на тип (f a)
, где f
является конструктором типа с видом * -> *
, то мы можем описать ассоциированное отображение для функций как функция высшего порядка с типом (a -> b) -> (f a -> f b)
, который, конечно, является классом типа с именем Functor
.
Однако на Hask можно легко представить хорошо функционирующие эндофункторы, которые нельзя записать (напрямую) как экземпляр Functor
, например, функтор, отображающий тип a
на Either a t
. И хотя в функторе от Hask до какой-то другой категории явно нет особого смысла, разумно рассмотреть (контравариантный) функтор от Hask до Hask ор .
Кроме того, экземпляры Functor
обязательно отображаются из всей категории Hask на некоторое ее подмножество, которое, таким образом, также образует категорию. Но также разумно говорить о функторах между подмножествами Hask . Например, рассмотрим функтор, который отправляет типы с Maybe a
на [a]
.
Возможно, вы захотите просмотреть пакет category-extras
, который предоставляет некоторые структуры, основанные на теории категорий, встроенные в Hask , вместо того, чтобы предполагать его полноту.