GHCi中的Haskell语句被中断似乎打破了cmd

时间:2018-04-27 01:49:39

标签: haskell cmd ghci

我刚刚开始使用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后,窗口冻结。

编辑:

我现在在中断其他无限递归时经历过这种情况,比如我的合并(哎呀!)并没有将单身人士视为必然的排序。

2 个答案:

答案 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已做好准备采取行动。