
Markus Böhm wrote:
Tx Heinrich. Could You explain how this "modelling the execution order as data dependency" works and how its tranlsated into sequential, imperative code? I mean in principle/for dummies.
From my beginner's perspective I feel I need that insight to understand how sustainable the abstraction is.
I don't know the details, but I think it's translated like this: putStrLn "Hello" >> putStrLn "World" => { state monad } \w1 -> let (a,w2) = primPutStrLn "Hello" w1 in primPutStrLn "World" w2 => { print out C code } a = cprimPutStrLn("Hello"); cprimPutStrLn("World"); The purpose of w1 and w2 is just to ensure that the first cprimPutStrLn is called before the second. Not very enlightening overall, if you ask me. It's not necessary to understand it anyway, the IO monad can be entirely understood as an algebraic data type, see for instance Swierstra und Altenkirch. Beauty in the beast. http://www.cse.chalmers.se/~wouter/Publications/BeautyInTheBeast.pdf Regards, Heinrich Apfelmus -- http://apfelmus.nfshost.com