我有时会遇到这个错误,虽然不是所有的时间,但它让我发疯。我不知道这是一个错误,还是有一些我不知道的行为或修复。
我正在输入一个多行命令:{和:},当我想结束命令时,如下所示,我收到错误,如下所示:
*MyModule| :}
unknown command ':}'
use :? for help.
我说它在97%的情况下都能正常工作,但有3%的时间我会遇到这种情况。
据我所知,应该总是输入:}来关闭多行条目,如下所述:
http://www.haskell.org/ghc/docs/7.4.1/html/users_guide/interactive-evaluation.html
目前,我知道在发生这种情况时唯一可以解决这种情况的方法是ctrl + D,不幸的是它杀死了ghci。
一个。这是一个错误还是有一些原因:}会突然变成一个"未知的命令"?
B中。如果我遇到这种情况,有没有办法恢复而不使用ctrl + D?我尝试多少次并不重要:},它总是导致"未知命令"一旦我进入这个位置,虽然我期望这个命令关闭多行输入。
就像在问题中所说的那样,这是Arch Linux上的GHCi,版本7.6.3。
答案 0 :(得分:4)
This is a known bug.一切正常除了 ghci有时会在打印正常提示时打印多行提示。
答案 1 :(得分:4)
正如我在评论中已经注意到的,这种行为的原因是当按下Ctrl-C
时GHCi没有正确重置提示。问题的根源可能在于以下代码(取自ghci-ng
):
multiLineCmd q = do
st <- lift getGHCiState
let p = prompt st
lift $ setGHCiState st{ prompt = prompt2 st }
mb_cmd <- collectCommand q ""
lift $ getGHCiState >>= \st' -> setGHCiState st'{ prompt = p }
return mb_cmd
如果collectCommand
抛出UserInterrupt
,则重置promt的行将永远不会被执行。我将此代码更改为:
multiLineCmd q = do
st <- lift getGHCiState
let p = prompt st
lift $ setGHCiState st{ prompt = prompt2 st }
mb_cmd <- collectCommand q "" `GHC.gfinally` lift (getGHCiState >>= \st' -> setGHCiState st'{ prompt = p })
return mb_cmd
解决了这个问题。