一个UU分析器只识别空字符串输入?

问题描述:

我需要一个类型为Parser()的值,它将在空(长度为0)输入时成功(并返回()),并在所有其他情况下失败。一个UU分析器只识别空字符串输入?

pSatisfy (const False)不完全符合要求。 pEnd甚至不适用于此目的。


pExact 0 pAscii可能是确切的“按定义”解决方案。似乎仍然没有工作:

ghci> runParser "<input>" (pSymbol "aaa" <|> pSymbol "bbb" <|> pExact 0 pAscii) "" 
*** Exception: ambiguous parser? 

看来,uu-parsinglib的想法比它更具说明性。秒差距,所以你只要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符号的方式。