[Haskell-beginners] Re: Understanding Monadic I/O
Heinrich Apfelmus
apfelmus at quantentunnel.de
Sun Jan 17 05:07:38 EST 2010
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
More information about the Beginners
mailing list