Трансформатор монада - Monad transformer

В функциональное программирование, а монада трансформатор конструктор типа, который принимает монада в качестве аргумента и в результате возвращает монаду.

Преобразователи монад могут использоваться для компоновки функций, инкапсулированных монадами, таких как состояние, Обработка исключений, а ввод / вывод - по модульному принципу. Обычно преобразователь монад создается путем обобщения существующей монады; применение результирующего преобразователя монады к монаде идентичности дает монаду, эквивалентную исходной монаде (игнорируя все необходимые упаковки и распаковки).

Определение

Преобразователь монад состоит из:

  1. Конструктор типа т из своего рода (* -> *) -> * -> *
  2. Монадные операции возвращаться и связывать (или эквивалентную формулировку) для всех т м куда м монада, удовлетворяющая законы монад
  3. Дополнительная операция, лифт :: м а -> т м а, удовлетворяющие следующим законам:[1] (обозначение `привязать` ниже указано инфиксное приложение):
    1. поднимать . return = возврат
    2. lift (m `bind` k) = (lift m)` bind` (lift. k)

Примеры

Вариант монадного трансформатора

Учитывая любую монаду , вариант монадного преобразователя (куда обозначает тип опциона ) определяется:

Преобразователь монад исключения

Учитывая любую монаду , преобразователь монад исключения (куда E является типом исключений) определяется:

Читатель монада преобразователь

Учитывая любую монаду , преобразователь монад читателя (куда E является типом среды) определяется:

Преобразователь государственной монады

Учитывая любую монаду , преобразователь монад состояний (куда S является типом состояния) определяется:

Преобразователь монады писателя

Учитывая любую монаду , писатель монад трансформер (куда W наделен моноид операция с элементом идентичности ) определяется:

Преобразователь монад продолжения

Учитывая любую монаду , преобразователь монады продолжения отображает произвольный тип р на функции типа , куда р - тип результата продолжения. Это определяется:

Обратите внимание, что преобразования монад обычно не коммутативный: например, применение преобразователя состояния к монаде опций дает тип (вычисление, которое может потерпеть неудачу и не дать конечного состояния), тогда как обратное преобразование имеет тип (вычисление, которое дает конечное состояние и необязательное возвращаемое значение).

Смотрите также

Рекомендации

  1. ^ Лян, Шэн; Худак, Пол; Джонс, Марк (1995). «Монада трансформеры и модульные интерпретаторы» (PDF). Материалы 22-го симпозиума ACM SIGPLAN-SIGACT по принципам языков программирования. Нью-Йорк, штат Нью-Йорк: ACM. С. 333–343. Дои:10.1145/199448.199528.

внешняя ссылка