为什么 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
?
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
?