我有以下代码:

main = do
    putStr "Test input : "
    content <- getLine
    putStrLn content

当我运行它(与runhaskell)或编译(GHC 6.10.4)的结果是这样的:

asd
Test input : asd

为什么Test input : asdasd之后打印?

在该代码示例上 http://learnyouahaskell.com/ ,该使用putStr,所述getLine真实呈现输出比我的不同。当我使用putStrLn程序按预期方式工作(打印,然后提示,和打印)。

难道是ghc一个错误,或者是它应该工作的方式?

有帮助吗?

解决方案

这是因为ghci中禁用缓冲,同时用GHC编译的程序默认具有行缓冲。您可以通过运行该看到这一点:

import System.IO
main = print =<< hGetBuffering stdout

在GHCI看到NoBuffering而与runghc你LineBuffering。由于换行字符不打印,直到的用户输入时,提示没有任

您的提示后加入hFlush stdout对其进行修复(或禁用缓存与hSetBuffering stdout NoBuffering,但是这可能是坏的)。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top