Haskell - 在putStr之前调用getLine

时间:2017-12-01 18:35:31

标签: haskell

当我想在Haskell中读取输入之前放一些文本时,我尝试这样写:

putStr "enter value: "
var <- getLine

但是输出需要用户输入才能显示文本:

[input]
enter value: 

当我使用putStrLn代替putStr时,它会显示为:

enter value: 
[input]

为什么这两个语句的功能不同?这是换行符的添加吗?

1 个答案:

答案 0 :(得分:6)

putStr "enter value: "实际写入输出缓冲区,当缓冲区变满或找到换行符时,该输出缓冲区仅在稍后刷新到实际标准输出。

这与C编程语言中的机制大致相同。

因此,即使在putStr "enter value: "之前运行getLine,我们也看不到输出消息,但感觉不对。

解决方案是明确刷新标准输出句柄。

import System.IO
-- ...
putStr "enter value: "
hFlush stdout
var <- getLine