haskell - 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。当我打断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
(哈)(除了不做傻事)?
HP ProBook 4535s,带有 Windows 7 Professional,64 位。AMD A4-3300M APU 处理器。
同样的情况也发生在 PowerShell 中。在 Git Bash 中,在我中断fix
.
编辑:
我现在在中断其他无限递归时遇到了这种情况,比如我的合并排序(哎呀!)没有将单例视为必然排序。
解决方案
看起来您正在运行安装在 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 已准备好执行操作。
推荐阅读
- javascript - js循环遍历新创建的列表元素的问题
- android - android - OkHttp:如何将整个地图添加到单个键值参数中?
- r - 跨行删除重复值
- wso2 - 如何更改 h2 数据库密码?
- android - MediaPlayer:在状态 0 中开始调用,mPlayer(0x0)
- java - 在微服务中用 Activiti 生成聚合层是否明智
- python-3.x - 'return' 外部函数 SyntaxError 使用 Visual Studio
- php - TYPO3 安装:PHP 扩展“intl”未加载
- git - 如何在预接收期间调用在 repo 中维护的脚本
- firebase - 代码应该在哪里更新 Firestore?