Я читал Аппликативные функторы, и у меня возникли трудности с согласованием несоответствия в соответствующих терминологиях теория категорий и функциональное программирование.
Хотя я просматривал различные блоги, наиболее полные ресурсы, которые я использовал для этого исследования, следующие:
- McBride and Paterson - Аппликативное программирование с эффектами (PDF)
- Гиббонс и Оливейра - Суть шаблона итератора (PDF)
- Tomas Petricek - Написание идиом в LINQ
В теории категорий functor является морфизмом из source в категорию target (в категории категорий). "Категория категорий" содержит набор объектов, который содержит как исходную, так и целевую категории и набор функторов, который содержит: функтор идентичности источника; функтор идентичности целевой категории; и функтор, соединяющий источник с мишенью (если категория источника совпадает с целевой категорией, а рассматриваемый функтор является тождеством, то нужен только один функтор).
В функциональном программировании аппликативные функторы описываются как пара операций:
-
pure : a -> f a
-
<*> : f ( a -> b) -> f a -> f b
.
Здесь мой вопрос
В какой интерпретации разъясняется соответствие между определением функционального программирования аппликативного функтора и категориальным определением функтора?
Более конкретно, какие части кортежа (pure,<*>)
соответствуют:
- категория источников
- целевая категория
- категория, в которой живет функтор.
- функтор эффект сохранения структуры на объектах категории источников
- эффект сохранения структуры функтора на морфизмах категории источников
Примечания: Я признаю, что это может быть неполная метафора, и не может быть однозначного соответствия для каждого из понятий, о которых я говорил. Я намеренно воздержался от того, чтобы поделиться своими предположениями о кажущихся соответствиях здесь, чтобы сохранить мой вопрос простым и избежать дальнейшего смешения вопросов.