我需要一个Parser ()
类型的值,它会在空(lenght 0)输入上成功(并返回()
),在所有其他情况下都会失败。
pSatisfy (const False)
并不能完全满足要求。 pEnd
似乎不适合此目的。
pExact 0 pAscii
可能是确切的“定义”解决方案。似乎仍然不起作用:
ghci> runParser "<input>" (pSymbol "aaa" <|> pSymbol "bbb" <|> pExact 0 pAscii) ""
*** Exception: ambiguous parser?
答案 0 :(得分:1)
似乎uu-parsinglib的想法更具说明性,例如parsec,所以你只有pure ()
:
λ> runParser "<input>" (pSymbol "aaa" <|> pSymbol "bbb" <|> pure "") "aaa"
"aaa"
λ> runParser "<input>" (pSymbol "aaa" <|> pSymbol "bbb" <|> pure "") "bbb"
"bbb"
λ> runParser "<input>" (pSymbol "aaa" <|> pSymbol "bbb" <|> pure "") ""
""
λ> runParser "<input>" (pSymbol "aaa" <|> pSymbol "bbb" <|> pure "") "ccc"
"*** Exception: Failed parsing '<input>' :
Unexpected ''c'' at end.
你需要以不需要神奇的EOF
符号的方式构建你的语法。