如何在编译的程序中将字符放在输入行的开头?

时间:2015-12-15 20:39:52

标签: haskell

我目前正在Haskell中编写一个基本的控制台应用程序,我想通过将>放在行的开头向用户询问输入时向用户显而易见。听起来很简单,对吧?

考虑这段代码:

main :: IO ()
main = do
    putStr "\nSay something:\n> "
    input <- getLine
    putStrLn ("You said " ++ input)

当在ghci中执行时,这非常有效,但是当我编译并运行程序时,现在会发生这种情况:

Say something:
something
> You said something

有人可以向我解释为什么会出现这种行为上的差异,以及我应该如何实现我想到的结果呢?

1 个答案:

答案 0 :(得分:4)

这是由于buffering,您可以通过以下方式将其关闭:

import System.IO (stdout, hSetBuffering, BufferMode(NoBuffering))

main :: IO ()
main = do
    hSetBuffering stdout NoBuffering
    -- rest of the code

或者当您需要刷新io流时执行hFlush stdout