haskell - 如何在ghci的多行模式下编辑前一行?

标签 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 的多行模式下编辑上一行,而无需再次输入所有行?

最佳答案

没有。 GHCi 使用 Haskeline ,它仅在每行基础上工作(并且不像 GNU Bash 那样提供 C-x C-e )。本质上,GHCi 只是通过 a queue of lines 工作。 ,使用 Haskeline's getInputLine .

因此 :{:} 只需要您的代码,在行之间添加 "\n" ,然后“运行它口译员”。不幸的是,没有可以编辑的行缓冲区。您所能做的就是使用 C-c 放弃这些行,然后重试。

关于haskell - 如何在ghci的多行模式下编辑前一行?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45973912/

相关文章:

shell - Haskell 从进程中读取

haskell - 如何完全中止 Haskell 运行时?

haskell - 如果 map 中不存在则使用默认值

haskell - 为什么 Haskell NoBuffering 选项似乎仍然可以缓冲?

haskell - 无法解析数据/新类型声明中的数据构造函数 : [Either Int Int]

haskell - Haskell "id"函数必须返回与传入相同的值的要求的类别理论基础是什么?

haskell - 更改用于在 GHCi 中运行 "shell commands"的 shell

haskell - 在 ghci 中为与模块相关的命令指定包名

Haskell Read(无实例)

list - Haskell 多行 `let` in `ghci`