
Что функциональные программисты могут извлечь уроки из последующего исчисления
8 июля 2025 г.Таблица ссылок
Введение
Перевод на последовательное исчисление
2.1 Арифметические выражения
2.2 Пусть привязки
2.3 Определения верхнего уровня
2.4 Алгебраические данные и типы кодов
2.5 первоклассные функции
2.6 Операторы управления
Оценка в контексте
3.1 Контексты оценки для развлечения
3.2 Сосредоточение внимания на оценке в сердечнике
Правила печати
4.1 Правила печати для развлечения
4.2 Правила печати для Core
4.3 Тип. Звукость
Понимание
5.1 Контексты оценки являются первым классом
5.2 Данные двойные до кодата
5.3 LET-связы
5.4 Трансформация случая
5.5 Прямой и косвенный потребители
5.6 Позвоните в запас, вызовов и eta-laws
5.7 Линейная логика и двойственность исключений
Связанная работа
Заключение, заявление о доступности данных и подтверждение
A. Взаимосвязь с последовательным исчислением
B. Правила набора развлечений
C. Оперативная семантика лейбла/goto
Ссылки
5 Insights
В предыдущем разделе мы объяснили, что такое Calculus и как это работает. Теперь, когда мы знаем, что и как мы можем объяснить, почему это исчисление так интересно. Поэтому этот раздел представляет собой небольшую коллекцию независимых пониманий. Чтобы быть ясным, эти идеи очевидны для тех, кто глубоко знаком с 𝜆𝜇𝜇 𝜆𝜇𝜇-calculus, но мы все еще можем вспомнить, насколько они удивительны для нас, когда мы впервые узнали о них.
5.1 Контексты оценки являются первым классом
Центральной особенностью 𝜆𝜇𝜇 𝜆𝜇𝜇-calculus является лечение контекстов оценки в качестве первоклассных объектов, как мы упоминали ранее. Например, рассмотрим термин (⌜2⌝ ∗ ⌜3⌝) ∗ ⌜4⌝ в веселье. Когда мы хотим оценить это, мы должны использовать контекст оценки □ ∗ ⌜4⌝, чтобы оценить подходящий (⌜2⌝ ∗ ⌜3⌝) и получить ⌜6⌝ ∗ ⌜4⌝, который мы можем затем оценить до ⌜24⌝. Перевод этого термина в ядро дает 𝜇𝛼. ∗ (𝜇𝛽. ∗ (⌜2⌝, ⌜3⌝; 𝛽), ⌜4⌝; 𝛼). Чтобы оценить этот термин, нам сначала нужно сосредоточить его, давая
𝜇𝛼.⟨𝜇𝛽. ∗ (⌜2⌝, ⌜3⌝; 𝛽) | 𝜇𝑥. ˜ ∗ (𝑥, ⌜4⌝; 𝛼)⟩
Когда мы теперь начинаем оценивать с ⋆, шаги такие же, как и в веселье. Используя вызовов, 𝜇-восклинение оценивается в первую очередь, давая ∗ (⌜2⌝, ⌜3⌝; ∗ (𝜇𝑥. ∗ (⌜6⌝, ⌜4⌝; ⋆) может затем быть непосредственно оцениваться до ⌜24⌝.
После фокусировки мы видим, как 𝛽 является переменной, которая означает контекст оценки в веселье. Термин 𝜇𝑥. ˜ ∗ (𝑥, ⌜4⌝; 𝛼) является первоклассным представлением контекста оценки □ ∗ ⌜4⌝. Сначала мы оцениваем субэкспрессию ∗ (⌜2⌝, ⌜3⌝; 𝛽), а затем вставляем результат в ∗ (𝑥, ⌜4⌝; ⋆), чтобы закончить оценку, как мы делали в веселье. Другими словами, □ из контекста оценки в веселье соответствует продолжению 𝛽 в ядре и аналогичным образом определяет, в каких порядок порядок оцениваются.
5.2 Данные двойные до кодата
Последовательное исчисление проясняет связь между данными и кодатами как точно двойное друг к другу. При рассмотрении правил печати на рисунке 2 мы видим, что данные и типы кодат являются полностью симметричными. Эти два не являются симметричными на языках на основе естественного вычета: соответствие шаблона по типам данных включает в себя проверку, но нет соответствующего объекта в построении кодат. Точно так же вызов деструктора 𝐷 типа кодата всегда включает в себя объект Codata 𝑥, который должен быть разрушен, например, 𝑥.𝐷 (...), тогда как вызов конструктора типа данных не имеет соответствующего объекта.
Эта асимметрия зафиксирована в последовательном исчислении. Десрукторы (такие как FST) являются первоклассным и не требуют проверки, который ремонтирует симметрию конструктору. Точно так же шаблон совпадает (case {. ...}) не требует объекта для разрушения, что делает их совершенно симметричными для совпадений Copattern. Эта двойственность уменьшает концептуальную сложность и открывает дверь в направлении общего дизайна и реализации функций данных и типов кода.
Авторы:
(1) Дэвид Биндер, Университет Тюбингена, Германия;
(2) Марко Цшенке, Университет Тюбингена, Германия;
(3) Мариус Мюллер, Университет Тюбингена, Германия;
(4) Клаус Остерманн, Университет Тюбингена, Германия.
Эта статья есть
Оригинал