Function Haskell中case语句的多个操作

Function Haskell中case语句的多个操作,function,haskell,io,Function,Haskell,Io,晚上的最后一个问题是,我正在构建Haskell程序的主要输入函数,我必须检查引入的参数 所以我用 args <- getArgs case length args of 0 -> putStrLn "No Arguments, exiting" otherwise -> { other methods here} args putStrLn“无参数,正在退出” 否则->{other methods here} 是否有一种设置其他方法的智能方法,或者,编写另一

晚上的最后一个问题是,我正在构建Haskell程序的主要输入函数,我必须检查引入的参数

所以我用

args <- getArgs
case length args of
    0 -> putStrLn "No Arguments, exiting"
    otherwise -> { other methods here}
args putStrLn“无参数,正在退出”
否则->{other methods here}
是否有一种设置其他方法的智能方法,或者,编写另一个案例在main中抛出的函数符合我的最佳利益

还是有更好的办法解决案件问题。我只需要输入一个名称。

args putStrLn“没有参数,正在退出”
args <- getArgs
case length args of
    0 -> putStrLn "No Arguments, exiting"
    otherwise -> do
        other
        methods
        here
否则->做 其他 方法 在这里
args putStrLn“无参数,正在退出”
否则->做
其他
方法
在这里

参数处理应在单独的函数中隔离。 除此之外,很难一概而论,因为有太多不同的处理参数的方法。 以下是一些值得考虑的类型签名:

exitIfNonempty :: [Arg] -> IO [Arg]                 -- return args unless empty
processOptions :: [Arg] -> (OptionRecord, [Arg])    -- convert options to record,
                                                    -- return remaining args
processOptionsBySideEffect :: [Arg] -> State [Arg]  -- update state from options,
                                                    -- return remaining args
callFirstArgAsCommand :: [(Name, [Arg] -> IO ())] -> [Arg] -> IO ()
以及两个实现的草图(这些代码中没有一个接近编译器):

我把其他的留给你想象

在main中编写另一个情况被抛出的函数是否符合我的最佳利益


是。此外,您应该建立一个组合器库,可以调用它来轻松处理各种程序的命令行参数。毫无疑问,这样的库已经存在于上,但这是其中一种情况,在这种情况下,使用自己的库可能比学习其他人的API更容易(而且肯定会更有趣)。

参数处理应该在单独的函数中隔离。 除此之外,很难一概而论,因为有太多不同的处理参数的方法。 以下是一些值得考虑的类型签名:

exitIfNonempty :: [Arg] -> IO [Arg]                 -- return args unless empty
processOptions :: [Arg] -> (OptionRecord, [Arg])    -- convert options to record,
                                                    -- return remaining args
processOptionsBySideEffect :: [Arg] -> State [Arg]  -- update state from options,
                                                    -- return remaining args
callFirstArgAsCommand :: [(Name, [Arg] -> IO ())] -> [Arg] -> IO ()
以及两个实现的草图(这些代码中没有一个接近编译器):

我把其他的留给你想象

在main中编写另一个情况被抛出的函数是否符合我的最佳利益

是。此外,您应该建立一个组合器库,可以调用它来轻松处理各种程序的命令行参数。毫无疑问,这样的库已经存在于上,但这是其中一种情况,在这种情况下,您可以更轻松地使用自己的API,而不是学习其他人的API(而且肯定会更有趣)。

在这里可能会有所帮助。

在这里可能会有所帮助