Lam*_*iry 7 haskell command-line-arguments
我在一个应用程序中使用optparse-applicative库,该应用程序在命令行上接受多个字符串并对每个字符串执行操作.我的第一次尝试是这样的:
arguments Just
( metavar "EXPR"
& help "Expressions to render, in zero-based De Bruijn index notation" )
Run Code Online (Sandbox Code Playgroud)
不幸的是,这允许在没有参数的情况下运行程序,即使它没有多大意义.
我的第二次尝试涉及分别解析第一个参数,然后将其转移到列表的其余部分:
(:) <$> argument Just ( metavar "EXPR" )
<*> arguments Just ( metavar "EXPR" )
Run Code Online (Sandbox Code Playgroud)
这应该有效,但它没有:当调用时--help,解析器吞噬它并处理它而不是显示帮助文本.
所以我的问题是:如何配置optparse以至少需要一个参数?
好的 - 我已经向图书馆的作者(Paolo Capriotti)报告了这个问题.他回答:
这里的问题是
arguments有一些特殊的逻辑:
- 最初忽略以' - '开头的参数
- 接受' - '
- 在遇到' - '之后接受以' - '开头的参数
鉴于这种期望的行为,
arguments不能简单地实现为many argument.我们可以做些什么来使像这个问题更容易处理的常见用例,是添加一堆便利构建器,如:
arguments1,非空参数列表,与参数具有相同的行为argument',解析1个参数,忽略以' - '开头的东西这样,许多参数'将类似于参数(没有 - 的特殊处理),以及参数1的一些参数.
欢迎提出更好名字的建议.:)
换句话说,他添加了一个新功能arguments1来完成我所描述的内容.该功能自0.5版开始提供.
所以现在我的代码看起来像这样:
arguments1 Just
( metavar "EXPR"
<> help "Expressions to render, in zero-based De Bruijn index notation" )
Run Code Online (Sandbox Code Playgroud)
谢谢,保罗!