如何定义< *> for applicative parser?

时间:2015-06-05 20:24:25

标签: scala parsing applicative

假设我们将解析器定义为函数

type Parser[A] = String => List(A, String) 

解析器接受一个输入字符串并产生一系列对。每对包含解析结果和输入的未消耗部分

据我了解,我们可以将解析器定义为applicative,并根据seq实现<*>解析器组合器。

seq组合子是一个函数,它将两个解析器pq作为参数,并返回一个新的解析器,它应用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

0 个答案:

没有答案
相关问题