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

Why is main's return not an exit code?

C 和 C++ 允许我们 return 来自 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.

更好

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