我可以使用哪些Haskell习惯用法在命令行中实现实时的find-as-type-autocomplete?

时间:2013-03-09 09:46:27

标签: shell haskell command-line

我试图通过在命令行上创建Notational Velocity样式的find-as-type-file文件来处理Haskell的基础知识。 我没有解决整个问题,而是尝试了一个非常基本的版本: 存在10行的文件,每行有3个字母的单词。在我输入的每个字母之后,我想根据我的输入到目前为止更新可能包含我正在键入的单词的行号列表的显示。

有人可以演示这样做的Haskell程序吗?我认为我的问题在于强制对每个字符输入进行重新评估。提前一百万谢谢。

2 个答案:

答案 0 :(得分:2)

我不会尝试编写你要求的整个Haskell程序,但这里有一个非常简短的例子,显示你声称现在被困住的那一刻:在每次按键后做一些事情。我们不会做任何令人兴奋的事情(只是碰撞一个数字并将其打印出来),但它会显示如何完成这一小任务,你也许可以从那里开始黑客攻击。

您真正需要知道的唯一一件事就是您可以关闭输入上的行缓冲。

import System.IO

loop n = do
    c <- getChar
    print n
    -- do whatever recalculation you need to do here, using
    -- n (which can be more complicated than an Integer, as
    -- it is here, of course) and c (which is a Char
    -- representing the key the user whacked)
    -- our recalculation is just to increase n by one
    loop (n+1)

main = do
    hSetBuffering stdin NoBuffering -- do this once before anything else
    loop 0

答案 1 :(得分:1)

学习反应性编程可能是一个很好的开始 为此,一个好的图书馆似乎是reactive banana
有一些基础example

如果您想了解更多信息,请参阅FRP,stack上的一个优秀主题将为您提供清晰的概述。