Практические причины церковного кодирования - PullRequest
14 голосов
/ 21 марта 2012

Церковное кодирование (он же шаблон посетителя) - это способ представления данных в виде функций: вместо

data T = C1 F1 F2 | C2 F3 F4

вы можете определить

data T = T (forall r. (F1 -> F2 -> r) -> (F3 -> F4 -> r) -> r)

. Хотя возможность представлять что-либо как функцию хороша, я всегда думал, что первая версия предпочтительнее, потому что она чище и не требует языковых расширений (явно forall). Однако иногда вы можете найти закодированные церковью данные в публичных библиотеках. Каковы преимущества использования этого?

Примеры церковного кодирования в публичных библиотеках:

1 Ответ

10 голосов
/ 21 марта 2012

Это соответствует стиль передачи с продолжением с несколькими продолжениями и выполняется для повышения производительности: избегается явное построение и уничтожение данных, вместо этого передается управление напрямую на основе результата сопоставления с шаблоном, который будет немедленно выполнен вместо этого.Это не всегда приводит к улучшению производительности, но когда это происходит, это может быть довольно значительным.

По сути, вы можете думать об этом как о данные против контроля .Если то, что вы делаете, по сути схоже с управлением по своей природе - например, с ветвями успеха и неудач парсера - тогда представление на основе управления вполне может быть лучше.В противном случае придерживайтесь данных.

...