2012-10-12 12 views
6

Jak mówi tytuł, szukam programu, który używa monadransformatorów w połączeniu z dużym stosem Monad.Przykład dużego stosu Monadów

Czy ktoś zna przykład z prawdziwego świata?

+0

Zdefiniuj "duży"? –

+0

Myślę, że 3 jest już "duży" – nponeccop

+0

Im więcej, tym lepiej, ale> 3 to dobry początek – nudded

Odpowiedz

8

Dobrym przykładem jest Haskeline - jego wewnętrzny InputCmdT typ to monada transformator stos głębokości 6 (patrz here):

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

Które w rzeczywistości może mieć skutki ciekawy, takich jak dmuchanie jeden podpis wpisz w systemie. Console.Haskeline.Emacs do ponad 20 000 linii na co najmniej jedną wersję GHC ...

5

Nie wiem, czy to się liczy jako „prawdziwego świata”, ale w moim przedłużeniem samouczka Write Yourself a Scheme in 48 Hours I wdrożone tłumacza na język programowania, który wykorzystuje następujące stosu:

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

i zacząłem dodanie kontynuacje do języka poprzez zdefiniowanie

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

nigdy zakończeniu kontynuacje realizacji, ale można zobaczyć, jak daleko mam przez checking it out on Github.