optparse-applicative:至少需要一个参数

时间:2012-09-18 07:48:34

标签: haskell command-line-arguments

我在应用程序中使用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以至少需要一个参数?

1 个答案:

答案 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!