我目前正在Haskell中编写一个基本的控制台应用程序,我想通过将>
放在行的开头向用户询问输入时向用户显而易见。听起来很简单,对吧?
考虑这段代码:
main :: IO ()
main = do
putStr "\nSay something:\n> "
input <- getLine
putStrLn ("You said " ++ input)
当在ghci中执行时,这非常有效,但是当我编译并运行程序时,现在会发生这种情况:
Say something:
something
> You said something
有人可以向我解释为什么会出现这种行为上的差异,以及我应该如何实现我想到的结果呢?
答案 0 :(得分:4)
这是由于buffering,您可以通过以下方式将其关闭:
import System.IO (stdout, hSetBuffering, BufferMode(NoBuffering))
main :: IO ()
main = do
hSetBuffering stdout NoBuffering
-- rest of the code
或者当您需要刷新io流时执行hFlush stdout
。