Чтение this Wikibook о Основах теории хаскелов и теории категорий, я узнал о функторах:
Функтор - это, по существу, трансформация между категориями, поэтому данная категории C и D, функтор F: C → D
отображает любой объект A в C в F (A) в D.
отображает морфизмы f: A → B в C в F (f): F (A) → F (B) в D.
... Звучит все хорошо. Далее приведен пример:
Пусть также пример экземпляра:
instance Functor Maybe where
fmap f (Just x) = Just (f x)
fmap _ Nothing = Nothing
Здесь ключевая часть: конструктор типа Может быть, любой тип T new type, Maybe T. Кроме того, fmap ограничивается типами Maybe, которые принимают функция a → b для функции Maybe a → Maybe b. Но это! У нас определены две части, то, что принимает объекты в Hask для объектов в другая категория (что может быть типов и функций, определенных на Maybe типы) и что-то, что берет морфизмы в Хаске для морфизмов в этой категории. Так что, возможно, это функтор.
Я понимаю, как определение fmap
является ключевым. Я смущен тем, как "конструктор типа Maybe" предоставляет первую часть. Я бы предпочел что-то вроде pure
.
Если я правильно понял, Maybe
скорее сопоставляет C
с D
. (Таким образом, являясь морфизмом на уровне категории, который может быть требованием для Functor)
Я думаю, вы могли бы перефразировать мой вопрос следующим образом: есть ли Functor, который не имеет очевидной реализации pure
?