2012-03-21 2 views
12

Церкви кодирования (ака Visitor Pattern) является способ представления данных в виде функций: вместоПрактические причины церковно Кодирование

data T = C1 F1 F2 | C2 F3 F4 

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

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

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

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

ответ

7

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

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

Смежные вопросы