2012-10-12 41 views
6

正如標題所說,我正在尋找一個程序,它使用monad-transformers和一大堆monad。大Monad堆棧的例子

有人知道現實世界的例子嗎?

+0

定義「大」? –

+0

我覺得3已經是「大」了 – nponeccop

+0

越多越好但是> 3是一個好開始 – nudded

回答

8

一個很好的例子是Haskeline - 其內部InputCmdT類型是深度6的單子變壓器堆(見here):

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

哪些實際上可以具有好奇的效果,如在系統吹一種類型的簽名。 Console.Haskeline.Emacs至少有一個GHC版本超過20,000行...

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