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

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

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

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

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

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

Обратите внимание, что преобразования монад обычно не коммутативный: например, применение преобразователя состояния к монаде опций дает тип
(вычисление, которое может потерпеть неудачу и не дать конечного состояния), тогда как обратное преобразование имеет тип
(вычисление, которое дает конечное состояние и необязательное возвращаемое значение).
Смотрите также
Рекомендации
внешняя ссылка
![[значок]](//upload.wikimedia.org/wikipedia/commons/thumb/1/1c/Wiki_letter_w_cropped.svg/20px-Wiki_letter_w_cropped.svg.png) | Эта секция нуждается в расширении. Вы можете помочь добавляя к этому. (Май 2008 г.) |