haskell - 在 Haskell 中更改 getLine 异常的退出值
问题描述
我正在 Haskell 的一个学生项目上工作,我对 getLine 的行为有疑问。这是代码(简化):
main :: IO()
main = do
str <- getLine
putStrLn str
我想做的是,当用户按下 Ctrl+D 时,能够退出(ExitFailure 84)。getLine 只是打印一个错误并退出程序(并返回 1)
deBruijn: <stdin>: hGetLine: end of file
如何改变这种行为?我只想将退出值更改为 84。
解决方案
您的程序永远不会看到 Control-D。它所看到的是标准输入已经关闭,在这种情况下是由您的终端响应输入的 Control-D 关闭的。这意味着您想在getLine
尝试从关闭的文件中读取一行之前捕获 EOF 条件。
import System.IO
import System.Exit
main :: IO ()
main = do
isClosed <- isEOF
if isClosed
then exitWith (ExitFailure 84)
else getLine >>= putStrLn
推荐阅读
- c++ - 这段代码使用 set_union 合并两个数组的时间复杂度是多少?
- postgresql - 将日期间隔作为函数参数传递
- python - 如何将 Series 对象写入 .txt 字符串行周围不带引号?
- odoo - 创建要继承的空选择
- python - 如何为有序数字构建树?
- typescript - 刚刚使用 npx 模板创建了新的 reactproject,但项目没有运行
- db2 - DB2:失败:CDIPR2123I:确保数据库 xmeta 为空
- java - 通过google smtp spring发送时出现MailConnectException
- go - Minecraft 服务器 - 当服务器离线时使用 tar 等工具进行备份,文件会损坏吗?
- flutter - Flutter 的自定义 CircularProgressIndicator