Monad transformator

I funktionell programmering är en monadtransformator en typkonstruktor som tar en monad som ett argument och returnerar en monad som ett resultat.

Monadtransformatorer kan användas för att komponera funktioner inkapslade av monader – såsom tillstånd, undantagshantering och I/O – på ett modulärt sätt. Vanligtvis skapas en monadtransformator genom att generalisera en existerande monad; applicering av den resulterande monadtransformatorn på identitetsmonaden ger en monad som är likvärdig med den ursprungliga monaden (bortse från eventuell nödvändig boxning och unboxning).

Definition

En monadtransformator består av:

  1. En typkonstruktör av typen (* -> *) -> * -> *
  2. Monadoperationer returnerar och binder (eller en likvärdig formulering) för alla tm där m är en monad, som uppfyller monadlagarna
  3. En ytterligare operation, lift :: ma -> tma , som uppfyller följande lagar: (notationen 'bind' nedan anger infix-applikation):
    1. hiss . återvända = återvända
    2. lyfta (m `binda` k) = (lyfta m) `binda` (lyfta . k)

Exempel

Alternativet monad transformator

Givet någon monad , alternativet monadtransformator där anger alternativtypen ) definieras av:

Undantaget monadtransformator

Givet alla monad undantaget monadtransformator där E är typen av undantag ) definieras av:

Läsaren monad transformator

Givet någon monad , är läsarmonadtransformatorn (där E är miljötypen) definieras av:

Statens monadstransformator

Givet någon monad , tillståndsmonadtransformatorn där S är tillståndstypen) definieras av:

Författarmonadtransformatorn

Givet någon monad skrivmonadtransformatorn där W är försedd med en monoid operation med identitetselement ) definieras av:

Fortsättningsmonadtransformatorn

Givet någon monad fortsättningsmonadtransformatorn en godtycklig typ R till funktioner av typen där R är resultattypen för fortsättningen. Det definieras av:

Notera att monadtransformationer vanligtvis inte är kommutativa : till exempel, att applicera tillståndstransformatorn på alternativmonaden ger en typ (en beräkning som kan misslyckas och inte ger något sluttillstånd), medan den omvända transformationen har typen (en beräkning som ger ett sluttillstånd och ett valfritt returvärde).

Se även

externa länkar