v Funkcionální programování, a monadový transformátor je konstruktor typu, který bere a monad jako argument a jako výsledek vrátí monádu.
Monadové transformátory lze použít k sestavení funkcí zapouzdřených monadami - jako je stav, zpracování výjimek a I / O - modulárním způsobem. Typicky je transformátor monad vytvořen zevšeobecněním existujícího monadu; aplikace výsledného monadového transformátoru na identitu monad získá monad, který je ekvivalentní s původní monadou (ignorování všech nezbytných boxů a unboxingů).
Definice
Monadový transformátor se skládá z:
- Konstruktor typu
t
z druh (* -> *) -> * -> *
- Monad operace
vrátit se
a svázat
(nebo ekvivalentní formulace) pro všechny t m
kde m
je monáda, uspokojující monad zákony - Další operace,
výtah :: m a -> t m a
, splňující následující zákony:[1] (notace `vazba`
níže označuje aplikaci infix):zvednout. návrat = návrat
lift (m `bind` k) = (lift m)` bind` (výtah k)
Příklady
Možnost monadového transformátoru
Vzhledem k jakékoli monadě
, volitelný monadový transformátor
(kde
označuje typ možnosti ) je definován:

Transformátor výjimek monad
Vzhledem k jakékoli monadě
, výjimka monadový transformátor
(kde E je typ výjimky) je definován:

Transformátor čtečky monad
Vzhledem k jakékoli monadě
, transformátor čtenářské monády
(kde E is the environment type) is defined by:

Státní transformátor monad
Vzhledem k jakékoli monadě
, státní monadický transformátor
(kde S is the state type) is defined by:

Transformátor zapisovače monad
Vzhledem k jakékoli monadě
, transformátor spisovatelské monády
(kde Ž je obdařen a monoidní úkon ∗ s prvkem identity
) je definován:

Pokračovací monadový transformátor
Vzhledem k jakékoli monadě
, pokračovací monadový transformátor mapuje libovolný typ R do funkcí typu
, kde R je výsledný typ pokračování. Je definován:

Všimněte si, že monadové transformace obvykle nejsou komutativní: například aplikace stavového transformátoru na opci monad poskytne typ
(výpočet, který může selhat a nepřináší žádný konečný stav), zatímco konverzní transformace má typ
(výpočet, který poskytuje konečný stav a volitelnou návratovou hodnotu).
Viz také
Reference
externí odkazy