Haskell problem: putStr not evaluated in the proper order (lazy)

I just ran into a problem where the putStr function in Haskell was not printed out in the order I wanted it to be. I wanted to prompt a user for input, then read their input, but the putStr output didn’t appear until later, after I hit the Enter key. (putStr is preferred here over putStrLn because it does not add a newline character after the output.)

The solution to this problem is shown in the image, which comes from here. When using putStr you need to flush the output in one of the ways shown.

The following code shows how this works:

main = do
    putStr "Whaddya want? "
    hFlush stdout
    userInput <- getLine
Photo D8