stringtranslate.com

Монада-трансформатор

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

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

Определение

Монадный трансформатор состоит из:

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

Примеры

Опциональный монада-трансформер

Для любой монады трансформатор монады опций (где обозначает тип опции ) определяется следующим образом:

Исключение монадного трансформатора

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

Читатель-трансформатор монады

Для любой монады преобразователь монады читателя (где E — тип среды) определяется следующим образом:

Трансформатор монады состояния

Для любой монады трансформатор монады состояния (где S — тип состояния) определяется следующим образом:

Писатель монада трансформатор

Для любой монады преобразователь монады писателя (где W наделен моноидной операцией с элементом идентичности ) определяется следующим образом:

Продолжение монадного трансформатора

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

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

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

Ссылки

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

Внешние ссылки