解析产品类型的CLI选项

时间:2019-02-01 05:38:47

标签: haskell optparse-applicative

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


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

1 个答案:

答案 0 :(得分:1)

尝试向总和分析器添加默认替代项:

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