假设我们有一个简短的haskell程序:
main = do putStr "2 + 2 = "
x <- readLn
if x == 4
then putStrLn "Correct"
else putStrLn "Wrong"
它产生了什么输出?
4
2 + 2 =正确
现在让我们来看另一个:
main = do putStrLn "2 + 2 = "
x <- readLn
if x == 4
then putStrLn "Correct"
else putStrLn "Wrong"
生成
2 + 2 =
4
正确
粗体4是用户输入的。
任何熟悉Haskell的人都可以向我解释为什么会这样吗? 我如何得到所需的结果,
2 + 2 = 4
正确
答案 0 :(得分:12)
线缓冲。在写完整行文本之前,输出缓冲区不会被“刷新”。
两种解决方案:
putStr
后跟hFlush stdout
。)hSetBuffering stdout NoBuffering
。)