我想解析与以下产品类型相对应的命令行选项。
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”。
以上就是我现在所拥有的。也可能是“ d”本身是另一种求和类型。在这种情况下,问题是我需要在命令行上指定的每个a,b,c值。
如何指定不能指定a,b或c的任何一个,并且CLI解析器仍然有效。目前,如果我甚至不通过a,b或c之一,解析器都会失败并显示一条错误消息。我了解我的构建器构造不正确,但是我无法掌握如何修复它。希望我已经正确地描述了问题,否则请告诉我。
答案 0 :(得分:1)
尝试向总和分析器添加默认替代项:
pB :: Parser SumType1
pB = flag' d <|> flag' e <|> flag' f <|> pure d -- defaults to d