解析产品类型的 CLI 选项

Parsing CLI options for a product type

我想解析与如下产品类型对应的命令行选项。


data SumType1 = d | e | f

data SumType2 = g | h | i

data Config = Config {
    a :: Bool,
    b :: SumType1,
    c :: SumType2
}

pB :: Parser SumType1
pB = flag' d <|> flag' e <|> flag' f

pC :: Parser SumType2
pC = flag' g <|> flag' h <|> flag' i

pConfig :: Parser Config
pConfig = Config <$> pA <*> pB <*> pC

opts :: ParserInfo Config
opts = info (pConfig <**> helper)
       (fullDesc <> progDesc "My CLI" <> header "CLI executable")

main :: IO()
main = do
       (Config a b c) <- execParser opts
-- Populate a default config using a b c values

为简单起见,我没有在此处添加 "long" 和 "help" with flag'。

以上是我目前的情况。也可能是 "d" 本身就是另一种求和类型。在此问题是我需要在命令行上指定的每个 a、b、c 值。

我该如何指定,以便可以不指定 a、b 或 c 中的任何一个,而 CLI 解析器仍然有效。目前,如果我不传递 a、b 或 c 中的任何一个,解析器将失败并显示一条错误消息。我知道我的构建器构造不正确,但是,我无法掌握如何修复它。希望我已经正确描述了问题,如果不正确请告诉我。

尝试为总和解析器添加一个默认替代方案:

pB :: Parser SumType1
pB = flag' d <|> flag' e <|> flag' f <|> pure d  -- defaults to d