我正在将 Java 应用程序移植到 Haskell。Java 应用程序的 main 方法遵循以下模式:
public static void main(String [] args)
{
if (args.length == 0)
{
System.out.println("Invalid number of arguments.");
System.exit(1);
}
SomeDataType d = getData(arg[0]);
if (!dataOk(d))
{
System.out.println("Could not read input data.");
System.exit(1);
}
SomeDataType r = processData(d);
if (!resultOk(r))
{
System.out.println("Processing failed.");
System.exit(1);
}
...
}
所以我有不同的步骤,在每一步之后我可以退出并显示错误代码,或者继续执行下一步。
我将其移植到 Haskell 的尝试如下:
main :: IO ()
main = do
a <- getArgs
if (null args)
then do
putStrLn "Invalid number of arguments."
exitWith (ExitFailure 1)
else do
-- The rest of the main function goes here.
使用这个解决方案,我将有很多嵌套if-then-else
(一个用于原始 Java 代码的每个退出点)。
有没有更优雅/惯用的方式在 Haskell 中实现这种模式?一般来说,什么是 Haskell 惯用的方式来实现像 Java 这样的命令式语言中使用的提前退出/返回?