2012-10-12 61 views
6

Como dice el título, estoy buscando un programa que use mónada-transformadores en combinación con una gran pila de Mónadas.Ejemplo de una gran pila de Monad

¿Alguien conoce un ejemplo del mundo real?

+0

¿Definir "grande"? –

+0

Creo que 3 ya es "grande" – nponeccop

+0

Cuanto más, mejor. Pero> 3 es un buen comienzo. – nudded

Respuesta

8

Un buen ejemplo es Haskeline - su interior InputCmdT tipo es una pila transformador mónada de profundidad 6 (véase here):

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

que en realidad puede tener efectos curiosos, como soplar una firma de tipo de sistema. Console.Haskeline.Emacs hasta más de 20,000 líneas para al menos una versión de GHC ...

5

No sé si esto cuenta como "mundo real", pero en mi extensión del tutorial Write Yourself a Scheme in 48 Hours he implementado un intérprete para un lenguaje de programación que utiliza la pila siguiente:

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

y empecé añadiendo continuaciones a la lengua mediante la definición de

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

nunca terminado la implementación de continuaciones, pero se puede ver cómo el momento me dio por checking it out on Github.