在对另一个问题的回应中,给出了一个小的 Haskell 代码草图,它使用包装函数来分解出一些代码,用于对命令行参数进行语法检查。这是我试图简化的代码部分:
takesSingleArg :: (String -> IO ()) -> [String] -> IO ()
takesSingleArg act [arg] = act arg
takesSingleArg _ _ = showUsageMessage
takesTwoArgs :: (String -> String -> IO ()) -> [String] -> IO ()
takesTwoArgs act [arg1, arg2] = act arg1 arg2
takesTwoArgs _ _ = showUsageMessage
有没有办法(也许使用Template Haskell?)避免为每个数量的参数编写额外的函数?理想情况下,我希望能够写出类似的东西(我正在编写这个语法)
generateArgumentWrapper<2, showUsageMessage>
这扩展到
\fn args -> case args of
[a, b] -> fn a b
_ -> showUsageMessage
理想情况下,我什至可以为generateArgumentWrapper
元函数提供可变数量的参数,这样我就可以做到
generateArgumentWrapper<2, asInt, asFilePath, showUsageMessage>
这扩展到
\fn args -> case args of
[a, b] -> fn (asInt a) (asFilePath b)
_ -> showUsageMessage
有人知道实现这一目标的方法吗?[String]
将命令行参数 ( ) 绑定到任意函数将是一种非常简单的方法。或者是否有完全不同的更好的方法?