正如标题所说,我正在寻找一个程序,它使用monad-transformer和一大堆Monads。
有人知道一个真实世界的例子吗?
答案 0 :(得分:8)
一个很好的例子是Haskeline - 它的内部InputCmdT
类型是深度为6的monad变换器堆栈(参见here):
type InputCmdT m = StateT Layout (UndoT (StateT HistLog (ReaderT (IORef KillRing)
(ReaderT Prefs (ReaderT (Settings m) m)))))
实际上可以产生奇怪的效果,例如在System.Console.Haskeline.Emacs中吹出一个类型签名,最多可以为至少一个GHC版本提供超过20,000行...
答案 1 :(得分:5)
我不知道这是否算作“真实世界”,但在我的教程Write Yourself a Scheme in 48 Hours的扩展中,我为使用以下堆栈的编程语言实现了一个解释器:
type Eval a = ReaderT Environment (ErrorT LispError IO a)
我开始通过定义
添加语言的延续type EvalCont r a = ContT r (ReaderT Environment (ErrorT LispError IO a))
我从未完成继续实施,但你可以看到checking it out on Github到达了多远。