【发布时间】:2012-04-05 07:37:14
【问题描述】:
在this response 到another question 中,给出了一个小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]) 绑定到任意函数将是一种非常简单的方法。或者是否有完全不同的更好的方法?
【问题讨论】:
标签: haskell