Вы можете уточнить, спрашиваете ли вы о «функторах в Haskell» или о Functor
s. Не всегда ясно, какая категория предполагается, когда в Haskell используются термины теории категорий.
Но да, предположение по умолчанию - Hask, который считается категорией типов Haskell с функциями как морфизмами. В этом случае эндофунктор 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 сильный> op.
Кроме того, экземпляры Functor
обязательно отображаются из всей категории Hask в какое-то ее подмножество, которое, таким образом, также образует категорию. Но также разумно говорить о функторах между подмножествами Hask. Например, рассмотрим функтор, который отправляет типы Maybe a
в [a]
.
Вы можете ознакомиться с category-extras
package, который предоставляет некоторые структуры, основанные на теории категорий, встроенные в Hask вместо того, чтобы принимать его во всей полноте.
person
C. A. McCann
schedule
17.07.2010