在第76页上,我们定义了一个函数item
作为解析器 - 如果失败,则函数需要String
并返回[(Char, String)]
或[]
。Haskell编程中的函数解析器示例
第78页,我们定义一个函数sat
,需要一个谓语p
和“包装”解析器建设围绕
p :: (Char -> Bool) -> Parser Char
sat p = do x <- item
if p x then return x else failure
什么我不明白的是<-
的魔力呢?如果item
的结果不为空,那么这个运算符应该展开列表并从元组中取出第一项,否则它应该产生一些不会扼住谓词的东西。我错过了什么?
看起来您正在使用Graham Hutton的书“Programming in Haskell”。格雷厄姆在本章中使用的并非严格Haskell的简化 - 请参阅本章(8.9节)的结束语以及Graham网页上关于可直接执行Haskell的在线代码。 –