如何在 ghci 的多行模式下编辑前一行?
How to edit prior line in ghci's multi-line mode?
使用 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
的多行模式下编辑前一行而无需再次键入所有行?
没有。 GHCi 使用 Haskeline, which only works on a per-line basis (and does not provide C-x C-e
as GNU Bash does). Essentially, GHCi just works through a queue of lines, which use Haskeline's getInputLine
.
所以 :{
和 :}
只接受你的代码,在你的行之间添加 "\n"
,然后 "run it trough the interpreteter"。不幸的是,没有可以编辑的行缓冲区。您所能做的就是丢弃带有 C-c
的行并重试。
使用 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
的多行模式下编辑前一行而无需再次键入所有行?
没有。 GHCi 使用 Haskeline, which only works on a per-line basis (and does not provide C-x C-e
as GNU Bash does). Essentially, GHCi just works through a queue of lines, which use Haskeline's getInputLine
.
所以 :{
和 :}
只接受你的代码,在你的行之间添加 "\n"
,然后 "run it trough the interpreteter"。不幸的是,没有可以编辑的行缓冲区。您所能做的就是丢弃带有 C-c
的行并重试。