【发布时间】:2023-03-31 19:34:01
【问题描述】:
我正在使用interact 逐步处理一些用户输入(具体来说,它是一个国际象棋程序)。但是,我还没有找到一种方法来处理用户可能只想跳出循环并从头开始这场国际象棋比赛的情况。
当我在 ghci 中执行正常程序时,按 Ctrl-C 不会退出整个 ghci,而只会停止程序本身并允许我继续执行其他一些程序。但是,如果我在控制台中按Ctrl-C 并启用interact 功能,则会显示以下消息:
^CInterrupted.
*Main>
<stdin>: hGetChar: illegal operation (handle is closed)
然后我必须重新启动 ghci。
我也想过捕获特殊的用户输入,例如“退出”,但是,由于interact 的类型是interact :: (String -> String) -> IO (),所以输入必须先通过类型为(String -> String) 的函数,而我没有' t 找到了一种方法让该函数通知主 IO 它应该退出。
我应该如何摆脱interact?还是 interact 不打算这样使用,我应该编写自定义 IO 函数?
【问题讨论】:
-
你试过
-D 吗? -
@Carsten 似乎什么也没做
-
@Carsten 文字字符 ^D 显示在终端中。
-
您使用的是哪个操作系统?
-
我通常认为
interact是过去的爆炸。这些天来它很少见,我认为它仍然在这里主要是为了向后兼容。
标签: loops haskell input io user-input