【发布时间】:2016-11-21 09:41:12
【问题描述】:
我正在尝试在 Haskell 中使用 readline 而不将光标转移到下一行。
比如我写了如下代码:
readEvalPrintLoop :: IO()
readEvalPrintLoop = do
line <- getLine
case line of
"bye" -> return ()
line -> do putStrLn $ interpret line
readEvalPrintLoop
启动程序后:
> 1 2 + . <enter>
3
但我希望找到最简单的方法来获得关注:
> 1 2 + . <enter> 3
【问题讨论】:
-
@Bakuriu 是的,它应该是您提到的输入缓冲。请注意,此缓冲区不存在于 Haskell 应用程序中,而是存在于终端中(在 OS 内核或终端仿真器中)。默认情况下,终端会像往常一样回显每个键并移动光标,而无需与应用程序进行任何交互。应用程序可以要求终端更改此默认行为,实际上 ncurses 是一种常见的方法。
-
@Bakuriu 缓冲只是切线相关:这里真正的问题是回显。在我的回答中,我也关闭了缓冲,但不是为了防止换行符出现;相反,它是允许其他所有内容一次出现而不是缓冲区大小的块!
-
@Andrei 如果你和我一样,这个问题可能会让你想知道到底发生了什么以及哪些行为是可配置的。您可以在The TTY demystified 阅读更多相关信息,但我警告您:如果您只想完成工作,这将比您想要的信息多得多!
标签: haskell io console readline