Haskell/Monad transformers: различия между версиями

1 байт добавлено ,  3 года назад
→‎Изобилие трансформеров: оформление, исправление
(орфография, викификатор)
(→‎Изобилие трансформеров: оформление, исправление)
Модуль пакета <tt>transformers</tt> обеспечивает трансформеры для многих общих монад (<code>MaybeT</code>, например, может быть найдена в {{Haskell lib|p=transformers|v=latest|Control|Monad|Trans|Maybe}}). Они определены в соответствии с их нетрансформерской версией; то есть, реализация в базовом та же самая, только с дополнительными обертками и развертками, необходимыми для ввинчивания в другую монаду.
 
Выберем произвольный пример, <code>ReaderT Env IO String</code> -- вычисление, которое вовлечет считываемое значение из некоторого окружения типа <code>Env</code> (семантика из <code>Reader</code>, базовой монады) и выполняет некоторое <code>IO</code> (действие) для того, чтобы получить значение типа <code>String</code>. Так как операторы <code>bind</code> и <code>return</code> отражают семантику базовой монады, <code>do</code>-блок типа <code>ReaderT Env IO String</code> будет с внешней стороны похож на <code>do</code>-блок монады <code>Reader</code>; главная разница будет в том, что <code>IO</code>-действия становятся тривиальными для встраивания при использовании функции <code>lift</code>.
 
=== Манипуляции с типами ===
Анонимный участник