[Haskell] behavioral difference between GHC and GHCi

Glynn Clements glynn.clements at virgin.net
Mon Feb 9 00:30:03 EST 2004


S. Alexander Jacobson wrote:

> This code works echos lines properly under GHCi,
> but just sucks in input when running the GHC
> compiled executable.
> 
>   import IO
>   main= do
> 	  x<-hGetLine stdin
> 	  putStr x
> 	  main
> 
> Am I doing something wrong?

GHCi automatically disables buffering on stdout for its own purposes.

Compiled binaries don't; they should have the same default behaviour
as programs which are written in C (stdin/stdout are line buffered if
they are correspond to a terminal, and fully buffered otherwise;
stderr is always unbuffered).

Either:

1. Use putStrLn instead of putStr.
2. Call "hFlush stdout" after each call to putStr.
3. Call "hSetBuffering stdout NoBuffering" before the first call to putStr.

-- 
Glynn Clements <glynn.clements at virgin.net>


More information about the Haskell mailing list