我在应用程序中使用optparse-applicative库,该应用程序在命令行上接受多个字符串并对每个字符串执行操作。我的第一次尝试是这样的:
arguments Just
( metavar "EXPR"
& help "Expressions to render, in zero-based De Bruijn index notation" )
不幸的是,这允许使用 no 参数运行程序,即使它没有多大意义。
我的第二次尝试涉及分别解析第一个参数,然后将其转移到列表的其余部分:
(:) <$> argument Just ( metavar "EXPR" )
<*> arguments Just ( metavar "EXPR" )
这应该有效,但事实并非如此:当使用--help
调用时,解析器会将其吞噬并处理它而不是显示帮助文本。
所以我的问题是:如何配置optparse以至少需要一个参数?
答案 0 :(得分:6)
好的 - 我reported this issue给了图书馆的作者(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" )
谢谢,Paolo!