2012-10-12 9 views
6

Come dice il titolo, sto cercando un programma che utilizzi i trasformatori monad in combinazione con una grande pila di Monade.Esempio di pila Monad grande

Qualcuno conosce un esempio del mondo reale?

+0

Definire "grande"? –

+0

Penso che 3 sia già "grande" – nponeccop

+0

Più sono, meglio è, ma> 3 è un buon inizio – nudded

risposta

8

Un buon esempio è Haskeline - suo interno InputCmdT tipo è una pila trasformatore monade profondità 6 (vedi here):

type InputCmdT m = StateT Layout (UndoT (StateT HistLog (ReaderT (IORef KillRing) 
       (ReaderT Prefs (ReaderT (Settings m) m))))) 

che può effettivamente avere effetti curiosi, come soffia firma di tipo a sistema. Console.Haskeline.Emacs fino a oltre 20.000 linee per almeno una versione di GHC ...

5

Non so se questo conta come "mondo reale", ma nella mia estensione del tutorial Write Yourself a Scheme in 48 Hours ho implementato un interprete per un linguaggio di programmazione che utilizza il seguente stack:

type Eval a = ReaderT Environment (ErrorT LispError IO a) 

e ho iniziato aggiungendo continuazioni al linguaggio definendo

type EvalCont r a = ContT r (ReaderT Environment (ErrorT LispError IO a)) 

non ho mai finito continuazioni di attuazione, ma si può vedere fino a che punto sono arrivato da checking it out on Github.