Черч-кодирование (он же шаблон посетителя) — это способ представления данных в виде функций: вместо
data T = C1 F1 F2 | C2 F3 F4
вы можете определить
data T = T (forall r. (F1 -> F2 -> r) -> (F3 -> F4 -> r) -> r)
. Хотя возможность представлять что-либо в виде функции — это хорошо, я всегда думал, что первая версия предпочтительнее, потому что она чище и не требует языковых расширений (явное forall
). Однако иногда в публичных библиотеках можно найти закодированные церковью данные. Каковы преимущества использования этого?
Примеры церковной кодировки в публичных библиотеках:
- Итерировать
- Монады контроля версий
- (пожалуйста, помогите мне расширить список)