Где функтор в естественной трансформации?

У меня был этот вопрос в глубине души с тех пор, как я увидел определение естественных преобразований в старом пакете "дополнительные функции" Эдварда Кметта:

-- | A natural transformation between functors f and g.
type f :~> g = forall a. f a -> g a

Но теперь, читая сообщение в блоге Стивена Диля о дополнениях, я нахожу это:

Естественным преобразованием в нашем контексте будет полиморфная функция, связанная с двумя экземплярами функтора Haskell f и g с сигнатурой типа (Functor f, Functor g) => forall a. f a -> g a. Который может быть написан со следующим синонимом типа.

type Nat f g = forall a. f a -> g a

Который был пощечиной моему отношению "я буду продолжать игнорировать это". Итак, на вопрос: почему нормально внезапно отбрасывать ограничения функтора?

1 ответ

В Haskell не разрешено накладывать ограничение на синоним типа. И даже для типов данных это устарело в Haskell 2010. Вместо этого следует накладывать ограничение на функции, которые работают со значениями этого типа.

Другие вопросы по тегам