如何在Haskell中输入时输入正确?

时间:2012-03-28 21:45:36

标签: haskell input io buffering

我在Haskell中编写了一个Brainfuck解释器,但只有在我按下Ctrl-D信号EOF时才对输入进行操作。如何在程序输入时使程序对每个字符起作用?

Here是来源。要使用该程序,请将文件解释为参数或在stdin的第一行中键入您的程序。

2 个答案:

答案 0 :(得分:3)

听起来你的输入正在被缓冲。您可以使用System.IO.hSetBuffering修改文件句柄的缓冲模式。例如,如果您正在读取标准输入,则可以使用以下命令禁用缓冲:

import System.IO

hSetBuffering stdin NoBuffering

答案 1 :(得分:1)

getLine等待输入换行符(\n),因为如果用户键入了一堆字符但从未按下输入怎么办?如果某条“线”已经被处理,如果那条“线”毕竟不是一条线,那将是一个错误。

您应该使用getContents代替将返回在终端输入的所有内容。

此外,您使用以下行:

then hGetContents =<< openFile (head args) ReadMode

这将打开一个文件,永远不会关闭它。这对你的短期计划来说很好,但是对于将来习惯这样做可能是一个更好的想法:

then readFile $ head args