Введение

В функциональном программировании понятие катаморфизма (от древнегреческого κατά "вниз" и μορφή "форма, вид") обозначает единственный гомоморфизм из начальной алгебры в некоторую другую алгебру. Катаморфизмы предоставляют обобщение свёрток списков на произвольные алгебраические типы данных, которые могут быть описаны как начальные алгебры. Двойственным понятием является анаморфизм, обобщающий развёртывания. Гиломорфизм — это композиция анаморфизма и катаморфизма.

Определение

Рассмотрим начальную алгебру для некоторого эндофунктора некоторой категории в себя. Здесь есть морфизм из в . Поскольку она начальная, мы знаем, что если есть другая алгебра, то есть морфизм из в , то существует единственный гомоморфизм из в . По определению категории алгебр, это соответствует морфизму из в , обычно также обозначаемому , такому, что . В контексте алгебры, единственный морфизм из начального объекта обозначается и, следовательно, характеризуется следующим соотношением:

Терминология и история

Другая нотация, встречающаяся в литературе, – использование открытых скобок, известных как «банановые скобки». В связи с этим катаморфизмы иногда называют «бананами», как отмечается в работах Эрика Мейджера и др. Одной из первых публикаций, представивших понятие катаморфизма в контексте программирования, была статья «Функциональное программирование с бананами, линзами, конвертами и колючей проволокой» Эрика Мейджера и др.

Примеры

Мы приводим ряд примеров, а затем рассматриваем более общий подход к катаморфизмам в языке программирования Haskell.