2017-08-31 39 views
3

使用ghci,我有時會使用多行模式輸入定義(如interactive-evaluation documentation中所述)。如何在ghci的多行模式下編輯之前的行?

例如,

> :{ 
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| 

要糾正錯誤,我需要編輯上一行。但是,我找不到任何回頭編輯上一行的方法。相反,I ^C退出多線模式並重新開始,必要時重複,直到我逐行輸入整個定義而沒有錯誤。

有什麼方法可以編輯ghci的多行模式中的上一行,而無需再次輸入所有行?

+0

你不能 - 只需將你的代碼輸入到一個文件並加載該文件。 – user2407038

+1

如果多行模式進入真正的編輯模式,我會很高興,其中1)您仍然可以看到上面的行,2)您可以像普通編輯器一樣在屏幕的底部自由移動。唉,事實並非如此。 – chi

回答

1

編號GHCi使用Haskeline,它只能在每行的基礎上工作(並且不提供C-x C-e作爲GNU Bash)。基本上,GHCi只能通過a queue of lines工作,其中使用Haskeline's getInputLine

所以:{:}只需要你的代碼,在你的行之間加"\n",然後「通過解釋器運行它」。不幸的是,沒有可以編輯的行緩衝區。你所能做的就是放棄C-c,然後重試。

相關問題