Эти термины упоминаются в моем курсе университета. Быстрый поиск в Google указал мне на некоторые университетские бумаги, но я ищу простое объяснение.
functional-programming
haskell
Гаурав Абби
источник
источник
C
это объект в некоторой категории (скажемCC
),F
это функтор,CC -> CC
поэтому он отображаетсяCC
обратно на себя. ТеперьF CC -> CC
это просто обычная стрелка в категорииCC
. Таким образом,F
алгебра - это объектC : CC
и стрелкаF C -> C
вCC
Ответы:
Хотя 2 ответа уже были предоставлены, я не думаю, что «банановый сплит» здесь уже объяснялся.
Это действительно определено в «Функциональном программировании с использованием бананов, линз, конвертов и колючей проволоки, Эрик Мейер Маартен Фоккинга, Росс Патерсон, 1991»; эту статью трудно читать (для меня) из-за интенсивного использования Squiggol. Тем не менее, «Учебник по универсальности и выразительности сгиба, Грэм Хаттон, 1999» содержит определение, которое легче разобрать:
источник
Так что на самом деле это ссылка на статью Мейера и нескольких других под названием « Функциональное программирование с использованием бананов, линз, конвертов и колючей проволоки », основная идея в том, что мы можем взять любой рекурсивный тип данных, например, скажем,
и мы можем выделить рекурсию в переменную типа
причина, по которой я добавил это
F
потому, что теперь это функтор! Это также позволяет нам имитировать списки, но с изюминкой: для создания списков мы должны вложить тип спискаЧтобы восстановить наш первоначальный список, мы должны продолжать вкладывать его бесконечно . Это даст нам тип,
ListFF
гдеДля этого определите «тип с фиксированной точкой»
В качестве упражнения вы должны убедиться, что это удовлетворяет нашему уравнению, приведенному выше. Теперь мы наконец можем определить, что такое бананы (катаморфизмы)!
ListAlg
s являются типом «списка алгебр», и мы можем определить конкретную функциюДальше больше
Выглядит знакомо?
cata
точно так же, как правильные сгибы!Что действительно интересно, так это то, что мы можем сделать это не только над списками, у любого типа, который определен с помощью этой «фиксированной точки функтора», есть
cata
и, чтобы вместить их все, мы просто должны ослабить сигнатуру типа.Это на самом деле вдохновлено частью теории категорий, о которой я писал , но это мясо стороны Haskell.
источник
Хотя jozefg дал ответ, я не уверен, что он ответил на вопрос. «Закон слияния» объясняется в следующей статье:
В основном это говорит о том, что при некоторых условиях вы можете комбинировать («плавить») композицию функции и складывать ее в одну складку, поэтому в основном
Условиями этого равенства являются
«Банановый сплит» или «Банановый сплит закон» из статьи
К сожалению, эту статью очень трудно расшифровать, так как она использует формализм Берда-Меертенса, поэтому я не мог понять, чего она стоит. Насколько я понял, «закон о банановом разделении» говорит, что если у вас есть 2 сгиба, работающие с одним и тем же аргументом, они могут быть объединены в один сгиб.
источник