Haskell 为什么main';返回的不是退出代码吗? C和C++允许我们从代码>主< /代码>返回退出代码。为什么哈斯克尔不这么做?在我看来,这很简单;只需要main::IO Int而不是IO t
我意识到以下情况不会像C程序员所期望的那样:Haskell 为什么main';返回的不是退出代码吗? C和C++允许我们从代码>主< /代码>返回退出代码。为什么哈斯克尔不这么做?在我看来,这很简单;只需要main::IO Int而不是IO t,haskell,exit-code,Haskell,Exit Code,我意识到以下情况不会像C程序员所期望的那样: main :: IO Int main = do return 1 -- Execution continues, thanks to (>>) putStrLn "Unreachable?" return 2 -- Exit code 2? 这种退出代码可能很棘手,但到底有多棘手呢?对我来说,似乎比导入系统更好。退出这不值得。99%的Has
main :: IO Int
main = do
return 1 -- Execution continues, thanks to (>>)
putStrLn "Unreachable?"
return 2 -- Exit code 2?
这种退出代码可能很棘手,但到底有多棘手呢?对我来说,似乎比导入
系统更好。退出这不值得。99%的Haskell程序只返回0,这是纯样板。当异常(即System.Exit
利用的异常)已经完成同样的工作时,它为错误添加了一个额外的非常特定的通道。您实际需要多久导入一次System.Exit
以获得细粒度的返回代码?以支持“样板”声明:Java具有void main(String[]args)
,这样程序员就不必添加返回0代码>在大多数时间结束时。如果需要其他返回代码,可以调用库例程。C++更为特殊,因为<代码> int()/<代码>有隐式<代码>返回0;<代码>结尾处,此隐式返回仅添加到main
main
已经不需要具有类型IO()
。它可以是任何类型,IO
作为顶级构造函数。使用返回值而不是丢弃它只会有点糟糕。我认为更大的问题是退出代码在不同的操作系统中改变了含义,可以想象一个操作系统使用完全不同的退出状态类型。它不是程序的基本可移植部分。