我正在尝试解析标志的排列。我想要的行为是“任何顺序的一个或多个标志,不重复”。我正在使用以下软件包:
- 兆秒差距
- 解析器组合器
我拥有的代码正在输出我想要的,但对输入过于宽松。我不明白为什么它接受多个相同的标志。我在这里做错了什么?
pFlags :: Parser [Flag]
pFlags = runPermutation $ f <$>
toPermutation (optional (GroupFlag <$ char '\'')) <*>
toPermutation (optional (LeftJustifyFlag <$ char '-'))
where f a b = catMaybes [a, b]
例子:
"'-" = [GroupFlag, LeftJustifyFlag] -- CORRECT
"-'" = [LeftJustifyFlag, GroupFlag] -- CORRECT
"''''-" = [GroupFlag, LeftJustifyFlag] -- INCORRECT, should fail if there's more than one of the same flag.