Мне удалось отобразить определение Функтора из теории категорий на определение Хаскелла следующим образом: поскольку объекты из Hask
являются типами, функтор F
- сопоставляет каждый тип
a
Hask
с новым типомF a
, грубо говоря, добавив к нему "F". - отображает каждый морфизм
a -> b
ofHask
на новый морфизмF a -> F b
с помощьюfmap :: (a -> b) -> (f a -> f b)
.
До сих пор так хорошо. Теперь я добираюсь до Applicative
и не могу найти упоминания о таком понятии в учебниках. Посмотрев, что он добавляет к Functor
, ap :: f (a -> b) -> f a -> f b
, я попытался найти свое собственное определение.
Во-первых, я заметил, что поскольку (->)
также является типом, его морфизмы Hask
тоже являются его объектами. В свете этого я сделал предложение, что аппликативный функтор является функтором, который также может отображать "стрелки" -объекты категории источников в морфизмы адресата.
Это правильная интуиция? Можете ли вы дать более формальное и строгое определение?