[Haskell-beginners] Simple IO problem
byorgey at seas.upenn.edu
Thu Mar 4 13:30:17 EST 2010
On Thu, Mar 04, 2010 at 01:06:42PM -0500, Ali Razavi wrote:
> Why doesn't this work the way it's supposed to, or the way it's intuitively
> apparent from the code, that is, showing the prompt first, getting the line
> next, and printing the result finally?
> main = do
> putStr "Please Enter Your Name: "
> name <- getLine
> putStrLn ("Hello " ++ name)
> changing putStr with putStrLn rectifies it to the expected behavior, but I
> wonder why this version misbehaves. FWIW, I use ghc in cygwin.
This is because of output buffering. By default, LineBuffering is
used, which means that the runtime will collect output in a buffer
until seeing a newline, at which point it will actually print the
buffer contents on the screen. This is why changing the putStr to
putStrLn makes it work. You can turn off output buffering like so:
main = do hSetBuffering stdout NoBuffering
putStr "Please Enter Your Name: "
More information about the Beginners