如何在ghci的多线模式中编辑前一行?

时间:2017-08-31 05:35:03

标签: haskell ghci

使用ghci,我有时会使用多行模式输入定义(如interactive-evaluation documentation中所述)。

例如,

> :{
Prelude| sumToN :: (Eq a, Num a) => a -> a
Prelude| sumToN n
Prelude|   | signum n /= 1 = 0
Prelude|   | otherwise = 1 + sumToN (n-1)
Prelude| :}
>

当使用这种多线输入模式时,我偶尔会发现我在前一行的输入中出错了。例如,在此代码中,我不小心输入了A而不是a

> :{
Prelude| sumToN :: (Eq a, Num a) => a -> A
Prelude|

要纠正我需要编辑前一行的错误。但是,我找不到任何方法可以返回并编辑上一行。相反,我^C退出多行模式并重新开始,必要时重复,直到我逐行输入整个定义而没有错误。

有没有办法在ghci的多行模式下编辑上一行,而无需再次输入所有行?

1 个答案:

答案 0 :(得分:1)

没有。 GHCi使用Haskeline,它仅适用于每行(并且不像GNU Bash那样提供C-x C-e)。从本质上讲,GHCi仅使用a queue of linesHaskeline's getInputLine

所以:{:}只接受您的代码,在您的行之间添加"\n",然后“通过解释器运行”。遗憾的是,您无法编辑行缓冲区。您所能做的就是使用C-c丢弃这些行,然后重试。