首页 > 解决方案 > GHCi 中的 Haskell 语句被中断似乎破坏了 cmd

问题描述

我刚开始使用 Haskell 并在 cmd 中使用 GHCi。在尝试了我在 PPCG 上看到的东西后,我遇到了一个问题。每当我fix用 control-C 打断时,一切都会消失:

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。当我打断exitPrelude 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(哈)(除了不做傻事)?

HP ProBook 4535s,带有 Windows 7 Professional,64 位。AMD A4-3300M APU 处理器。

同样的情况也发生在 PowerShell 中。在 Git Bash 中,在我中断fix.

编辑:

我现在在中断其他无限递归时遇到了这种情况,比如我的合并排序(哎呀!)没有将单例视为必然排序。

标签: haskellcmdghci

解决方案


看起来您正在运行安装在 Windows上的Haskell 平台。我曾经这样做过,但是这些天我通过Stack运行所有内容,所以我可能记错了以下内容。

但是,IIRC,当您尝试ghci在 Windows 中运行时,它会显式打印一条警告,该警告ghci已知在 Windows 上的中断命令存在问题,您应该改为通过批处理命令运行 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 已准备好执行操作。


推荐阅读