2012-09-18 7 views
7

私はコマンドラインで複数の文字列を受け取り、それぞれに対してアクションを実行するアプリケーションでoptparse-applicativeライブラリを使用しています。optparse-applicative:少なくとも1つの引数を必要とする

arguments Just 
    (metavar "EXPR" 
    & help "Expressions to render, in zero-based De Bruijn index notation") 

残念ながら、これは、それはあまり意味がありませんが、なし引数でプログラムを実行することができます:私の最初の試みはこれでした。

私の第二の試みは、最初の引数は別途、その後、リストの残りの部分にそれをコンスパース関与:

(:) <$> argument Just (metavar "EXPR") 
    <*> arguments Just (metavar "EXPR") 

これが働いているはずですが、それはしませんでした:パーサゴブルズ、--helpで呼び出されたときにそれをヘルプテキストを表示する代わりに処理します。

私の質問は、少なくとも1つの引数を必要とするようにoptparseを設定する方法です。

答えて

6

いいえ–私はreported this issueをライブラリの作者(Paolo Capriotti)に投稿しました。彼は答えた:

をここでの問題は、argumentsはにいくつかの特別なロジックを持っていることである。

  • 当初から始まる引数を無視する ' - '
  • することは受け入れ ' - '
  • で始まる引数を受け入れます' - 'の後に ' - 'が出現する

argumentsは単純にできませんmany argumentとして実装されます。で、

  • arguments1、非空の引数リスト:私たちは、に対処するために、この問題の1のように簡単に一般的なユースケースを作るために何ができるか

    は次のように、コンビニエンスビルダーの束を追加することです「 - 」

この方法では、多くの引数は」引数のようになります(の特別な処理なしに - )の引数

  • argument'、同じ動作が始まる事を無視して、1引数を解析して、いくつかの引数をつけるnts1。

    より良い名前の提案は大歓迎です。 :)

  • 言い換えれば、彼は私が説明したことを行うために新しい機能arguments1を追加しました。この関数はバージョン0.5から利用可能です。

    だから今私のコードは次のようになります。

    arguments1 Just 
        (metavar "EXPR" 
        <> help "Expressions to render, in zero-based De Bruijn index notation") 
    

    おかげで、パオロ!

    +1

    fyi ...バージョン0.9.0の 'arguments'と' arguments1'は 'many'と' some'の組み合わせを 'argument'で使うのが嫌いです。 – ErikR

    +0

    追加コメントありがとうございます。 – drumfire

    +0

    @ErikRしかし、 'some'を引数に使うと、デフォルトで有用なヘルプメッセージが表示されません(つまり、最後に' ... 'は付きません):-( –

    関連する問題