我想解析与以下产品类型相对应的命令行选项。
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中的一个,则解析器将失败并显示一条错误消息。我了解我的构建器构造不正确,但是我无法掌握如何修复它。希望我已经正确地描述了问题,如果没有,请告诉我。
尝试为总和解析器添加默认的替代方法:
pB :: Parser SumType1
pB = flag' d <|> flag' e <|> flag' f <|> pure d -- defaults to d
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句