あなたの説明を考えると、2 つの選択肢があると思います。2つのうち、辞書への変換が最も簡単だと思いますが、タプルへの変換は機能し、少し不器用です
したがって、次の定義を使用します。
options :: [OptDescr (String, String)]
options = [Option ['a'] ["alpha"] (ReqArg (\a -> ("alpha", a)) "empty") "",
Option ['b'] ["beta"] (ReqArg (\a -> ("beta", a)) "empty") "",
Option ['g'] ["gamma"] (ReqArg (\a -> ("gamma", a)) "empty") ""]
main = do
args <- getArgs
let (opts, nonopts, errs) = getOpt Permute options args
putStrLn $ show opts
これから、私の出力例のいくつかは次のとおりです。
[("beta","b"),("alpha","a")]
[("alpha","a"),("gamma","g"),("beta","b")]
等々。コマンドラインと同じ順序。しかし、上記の設定方法により、基本的に連想リストがあるため、特に値 (アルファ、ベータ、ガンマ) を持つタプルが必要な場合、私の最良のオプションは...
(lookup "alpha" opts, lookup "beta" opts, lookup "gamma" opts)
結果のデータ型は、「アルファ」、「ベータ」、「ガンマ」の順で (文字列、文字列、文字列) になります。