在第 76 页,我们将一个函数定义item
为解析器——一个接受 aString
并返回[(Char, String)]
或[]
失败的函数。
在第 78 页,我们定义了一个函数sat
,它接受一个谓词p
并围绕它“包装”一个解析器结构
p :: (Char -> Bool) -> Parser Char
sat p = do x <- item
if p x then return x else failure
我不明白的是魔法<-
?如果 的结果item
不为空,则此运算符应该解开列表并从元组中获取第一项,否则它应该产生不会阻塞谓词的东西。我错过了什么?