Исследовательская группа

Лаборатория языковых инструментов

Функциональное программирование с эффектами

October 17

При практическом програмировании для каждой функции желательно знать её тип, а также что она может делать с окружением, пока вычисляет значение. В Haskell эта задача решается исключительно при помощи типов: например, возвращаемые значения оборачиваются в монаду IO. Основная критика этого подхода заключается в неудобствах при появлении большого количества эффектов (монад) в сигнатуре функции.

Существуют другие подходы для решения этой проблемы. Например, функция может получать значение с информацией о том, что ей разрешено делать (effects as capabilities).

Алгебраические эффекты и их обработчики (algebraic effects and handlers) предлагают иной подход, который имеет некоторые преимущества в модульности по сравнению с монадическим походом. Введения в язык алгебраических эффектов позволяет выразить некоторые другие конструкции языков через них: исключения, yield, delimited continuations.

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

Материалы к докладу:

1. Fengyun Liu. A Study of Capability-Based Effect Systems // https://infoscience.epfl.ch/record/219173/files/thesis-jan-15.pdf

2. Koka language: https://www.microsoft.com/en-us/research/project/koka

3. Eff language: http://www.eff-lang.org

Докладчик: Д. Косарев.