假设我们将解析器定义为函数
type Parser[A] = String => List(A, String)
解析器接受一个输入字符串并产生一系列对。每对包含解析结果和输入的未消耗部分
据我了解,我们可以将解析器定义为applicative
,并根据seq
实现<*>
解析器组合器。
seq
组合子是一个函数,它将两个解析器p
和q
作为参数,并返回一个新的解析器,它应用p
和{{1}输入顺序。例如:
q
显然,我们可以轻松地为解析器定义val pa = symbol('a') // parser, which recognizes 'a' as the 1st char in the input
val pb = symbol('b') // parser, which recognizes 'b' as the 1st char in the input
val pab = seq(pa, pb) // recognizes "ab"
,然后根据flatMap
定义<*>
。我们能否以flatMap
的方式定义<*>
并实施seq
?