[Haskell-beginners] different getChar behaviour in interpeter and compiled program

Motiejus Jakštys desired.mta at gmail.com
Sun Oct 14 17:14:31 CEST 2012


consider this program:

    main = do
        c <- getChar
        putStrLn ("Entered: " ++ [c])

(It reads a character and prints it out, for ever).

When invoked from interpreter:

    motiejus at precise> ghci
    GHCi, version 7.4.1: http://www.haskell.org/ghc/  :? for help
    Loading package ghc-prim ... linking ... done.
    Loading package integer-gmp ... linking ... done.
    Loading package base ... linking ... done.
    Prelude> :load getchar.hs
    [1 of 1] Compiling Main             ( getchar.hs, interpreted )
    Ok, modules loaded: Main.
    *Main> main
    lEntered: l
    aEntered: a

The behaviour is fine: right after entering a character, I get echo

However, when started with runhaskell (or compiled ./getchar):

    motiejus at precise> runhaskell getchar.hs
    Entered: l
    Entered: a

Behaviour is different: I entered "l", but did not get the "entered"
back. Only after I entered carriage-return, I got my multiple echos
(including the CR).

Why is it so? Is it possible to make Haskell read character-by-character
in a compiled program?

Clarification: behaviour of
    $ runhaskell ./getchar.hs
is the same as 
    $ ghc ./getchar.hs && ./getchar

Ubuntu 12.04.1 i386, Haskell from standard repositories 7.4.1-1ubuntu2.


More information about the Beginners mailing list