我最近开始学习Haskell。我有这个代码
module Main
where
import IO
main = do
hSetBuffering stdin LineBuffering
putStrLn "Please enter your name: "
name <- getLine
putStrLn ("Hello, " ++ name ++ ", how are you?")
我正在使用GHC编译器和notepad ++编辑器。问题是交互是这样的:
处理开始&gt;&gt;&gt;
弗拉德
请输入你的姓名:
你好,弗拉德,你好吗? &LT;&LT;&LT;流程结束了。
如您所见,输出仅在我输入内容后写入。这有点出乎意料,因为我确信程序会首先询问我的名字,然后我会进入它然后它会打招呼。好吧,如果我手动运行exe会发生这种情况,但是如果我用notepad ++运行它并使用它的控制台包装器就不会...
如何让notepad ++显示输出,而不是在程序终止之前显示所有输出?这甚至可能吗?
答案 0 :(得分:7)
尝试将标准输出设置为LineBuffering!另外,在ghci中加载程序而不是运行已编译的版本似乎根本不需要任何缓冲......
顺便说一句,我不知道NPP中的控制台 - 感谢您指点我!
答案 1 :(得分:2)
我对notepad ++并不熟悉,但可能会做一个快速而又狡猾的方法
hFlush stdout
每次putStrLn之后。您甚至可以使用以下方法:
nppPutStrLn s = putStrLn s >> hFlush stdout