解析产品类型的 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
我想解析与如下产品类型对应的命令行选项。
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