2016-04-02 3 views
3

私は、を使って、exampleというプログラムのコマンドライン引数を解析しています。私は名前付きフィールド(レコード構文)を持つデータ型を持っています。例えば:私はbarは無名の、必須、位置コマンドライン引数でなければならないことのoptparse-ジェネリック伝えることができますどのようにHaskell、optparse-genericの名前のないコマンドライン引数

./example --foo 42 --bar "baz" 

data Example = Example { foo :: Int, bar :: String } deriving (Generic, Show) 

は、これは次のように呼び出すことができるプログラムを生成します。つまり、私はexampleと呼ぶと--barと入力したくないということです。例えば、私は次のようexampleを呼びたい:Haskellは標識し、非標識フィールドの両方を持つレコードをサポートしていませんので、

./example --foo 42 "baz" 
+2

私は考えていません、 [tag:optparse-generic]タグが必要です。 [tag:コマンドライン解析]の何が問題になっていますか? –

答えて

1

optparse-genericは、単一のデータ型定義から、このようなパーサの生成をサポートしていません。

しかし、何を行うことができ、すべてのラベル付きのフィールドの1つのデータ型と非標識フィールドの1種類を生成し、Applicative操作を使用して、それらを組み合わせて、このようなものです:

data Labeled = Labeled { foo :: Int } deriving (Generic, Show) 

instance ParseRecord Labeled 

data Unlabeled = Unlabeled String deriving (Generic, Show) 

instance ParseRecord Unlabeled 

data Mixed = Mixed Labeled Unlabeled deriving (Show) 

instance ParseRecord Mixed where 
    parseRecord = Mixed <$> parseRecord <*> parseRecord 
+0

これは、 '--help'を実行したときにヘルプテキストを複数回表示するようです。これに対処する方法がわかりません... –

関連する問題