
On Mon, Jan 11, 2010 at 2:57 PM, Markus Böhm
Hi, I'd like to understand in principle, how monadic I/O actions and combinators (>>=) are translated into imperative C--, to be executed sequentially.
Does sequencing of IO actions mean nesting of C-- functions and passing values/state via additional function parameters?
Is there any material with examples available?
Perhaps you could download JHC and compile with the -d c flag. It writes the C code, and JHC writes more understandable C code compared to GHC (IMHO) for example, main = putStrLn "hello, world" >> putStrLn "hello again, world" compiles to [lots of stuff] static void A_STD ftheMain(void) { jhc_function_inc(); fPrelude__IO__putStr(PROMOTE(c12)); (void)jhc_utf8_putchar((int)10); fPrelude__IO__putStr(PROMOTE(c23)); return (void)jhc_utf8_putchar((int)10); } so in this simple example you see there's no nesting of functions. David