2

フラグの順列を解析しようとしています。私が望む動作は、「繰り返しなしで、任意の順序で 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.
4

1 に答える 1