【问题标题】:Haskell Console IO in notepad++记事本++中的Haskell控制台IO
【发布时间】:2010-05-10 12:43:56
【问题描述】:

我最近开始学习 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++ 编辑器一起使用。问题是交互是这样的:

进程已启动 >>>
弗拉德
请输入您的姓名:
你好,弗拉德,你好吗?

如您所见,只有在我输入内容后才会写入输出。这有点出乎意料,因为我确信程序会首先询问我的名字,然后我会输入它,然后它会打招呼。好吧,这正是我手动运行 exe 时会发生的情况,但如果我使用 notepad++ 运行它并使用它的控制台包装器则不会...

我怎样才能让notepad++在应该的时候显示输出,而不是在程序终止之前显示全部?这甚至可能吗?

【问题讨论】:

    标签: haskell notepad++


    【解决方案1】:

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

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

    【讨论】:

    • 成功了,谢谢。这是真的,它没有,我不知道为什么它在记事本++中很重要。我补充说,因为这个cs.utah.edu/~hal/docs/daume02yaht.pdf(在第 40 页)说它应该完全解决这个问题,但我也没有想到 LineBuffering 标准输出。
    • 实际上,这并不是说它应该完全解决这个问题。它说它应该修复输入单行后读取输入未完成的错误。所以我想在这种情况下我应该是 LineBuffering 标准输出是有道理的。再次感谢!
    【解决方案2】:

    我不熟悉记事本++,但可能是一种快速而简单的方法

    hFlush stdout
    

    在每个 putStrLn 之后。您甚至可以制作以下方法:

    nppPutStrLn s = putStrLn s >> hFlush stdout
    

    【讨论】:

      猜你喜欢
      • 2017-10-15
      • 1970-01-01
      • 2010-09-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-04-01
      相关资源
      最近更新 更多