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