首页 > 解决方案 > 在 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。

标签: haskell

解决方案


您的程序永远不会看到 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

推荐阅读