我刚刚开始使用Haskell并在cmd中使用GHCi。在尝试something I saw on PPCG之后,我遇到了一个问题。每当我用control-C中断fix
时,一切都会死掉:
C:\Users\Scrooble>ghci
GHCi, version 8.2.1: http://www.haskell.org/ghc/ :? for help
Prelude> import Data.Function
Prelude Data.Function> fix (\x -> x + 1)
In^tCerrupte
d.
C:\Users\Scrooble>Prelude Data.Function> exit
(挂起)
^
和C
是我的键盘中断。 exit
也是我的。
Cerrupted
是对的!到底是怎么回事?!我好像已经退出了GHCi。当我中断exit
(提示再次为Prelude Data.Function>
)和:q
时,cmd有时会关闭,有时会再次提示C:\Users\Scrooble
;但是,当发生这种情况时,我的所有命令的第一个字符都会被忽略!
C:\Users\Scrooble>exit
'xit' is not recognized as an internal or external command,
operable program, or batch file.
0.o
我一个人在这吗?是否有fix
(ha)(除了不做蠢事)?
HP ProBook 4535s,Windows 7 Professional,64位。 AMD A4-3300M APU处理器。
PowerShell也是如此。在Git Bash中,在我中断fix
后,窗口冻结。
我现在在中断其他无限递归时经历过这种情况,比如我的合并(哎呀!)并没有将单身人士视为必然的排序。
答案 0 :(得分:0)
我认为这可以在ghc-8.2.2中修复。
答案 1 :(得分:0)
您好像正在Windows上运行Haskell platform。我过去常常这样做,但是现在我通过Stack运行所有内容,所以我可能会错误地记住以下内容。
但是,当您尝试在Windows中运行ghci
时,它明确地打印出一条警告,ghci
已知在Windows上出现break命令问题,而您应该通过以下方式运行GHCi批处理命令ghcii.bat
。
当我使用Haskell平台时,我总是使用ghcii.bat
,并且通常没有遇到这些问题。我总是在Git Bash中使用Haskell,这是我在Windows上的默认CLI,所以这也是一个决定因素。
这些天我在Windows 10上使用Stack,而在Git Bash中,我无法重现这个问题:
$ stack ghci
Prelude> :m +Data.Function
Prelude Data.Function> fix (\x -> x + 1)
Interrupted.
Prelude Data.Function>
Interrupted.
行是我点击 Ctrl + C 的地方。当我这样做时,fix
的阻止应用程序立即退出,并且REPL已做好准备采取行动。