正如标题所说,我正在寻找一个将monad-transformers与大型monad堆栈相结合的程序。
有没有人知道一个真实的例子?
发布于 2012-10-12 18:28:10
一个很好的例子是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中将一个类型签名吹到超过20.000行,至少有一个GHC版本……
发布于 2012-10-12 15:53:13
我不知道这是否算作“真实世界”,但在我的教程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))我从来没有完成过continuations的实现,但是你可以看到我在checking it out on Github上取得了多大的进展。
https://stackoverflow.com/questions/12853675
复制相似问题