解析产品类型的CLI选项

三岔岩女神

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


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中的一个,则解析器将失败并显示一条错误消息。我了解我的构建器构造不正确,但是我无法掌握如何修复它。希望我已经正确地描述了问题,如果没有,请告诉我。

Li-yao Xia

尝试为总和解析器添加默认的替代方法:

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

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章