[Haskell-beginners] Understanding Monadic I/O
David Virebayre
dav.vire+haskell at gmail.com
Thu Jan 14 07:52:01 EST 2010
On Mon, Jan 11, 2010 at 2:57 PM, Markus Böhm
<markus.boehm at googlemail.com> wrote:
> 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
More information about the Beginners
mailing list