在记事本++中的Haskell控制台IO

时间:2010-05-10 12:43:57

标签: haskell notepad++

我最近开始学习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 ++显示输出,而不是在程序终止之前显示所有输出?这甚至可能吗?

2 个答案:

答案 0 :(得分:7)

尝试将标准输出设置为LineBuffering!另外,在ghci中加载程序而不是运行已编译的版本似乎根本不需要任何缓冲......

顺便说一句,我不知道NPP中的控制台 - 感谢您指点我!

答案 1 :(得分:2)

我对notepad ++并不熟悉,但可能会做一个快速而又狡猾的方法

hFlush stdout
每次putStrLn之后

。您甚至可以使用以下方法:

nppPutStrLn s = putStrLn s >> hFlush stdout