フラグの順列を解析しようとしています。私が望む動作は、「繰り返しなしで、任意の順序で 1 つ以上のフラグ」です。次のパッケージを使用しています。
- メガパーセク
- パーサーコンビネーター
私が持っているコードは、私が望むものを出力していますが、入力が甘すぎます。同じフラグの複数を受け入れる理由がわかりません。ここで何が間違っていますか?
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.