为什么main的返回不是退出代码?

时间:2019-08-06 02:13:22

标签: haskell exit-code

C和C ++允许我们从main返回退出代码。为什么Haskell不这样做?在我看来,这很简单;只需要main :: IO Int而不是IO t

我意识到以下内容不会像C程序员所期望的那样起作用:

main :: IO Int
main = do
    return 1                   -- Execution continues, thanks to (>>)
    putStrLn "Unreachable?"
    return 2                   -- Exit code 2?

这种退出代码执行起来可能有些棘手,但实际上有多棘手?对我来说,似乎比必须导入System.Exit好。

1 个答案:

答案 0 :(得分:8)

这不值得。 99%的Haskell程序只会做return 0,那是纯粹的样板。当异常(System.Exit利用的异常)已经做得很好时,它为错误提供了一个非常具体的渠道。您实际上需要多久导入一次System.Exit以获得细粒度的返回码?