Slide 40
Slide 40 text
1 trait Traversal[A] {
2 def run[X](p: Parser[X], meta: Meta): A
3 }
4
5 def traversal[A, B](p: ParserA[A], f: Traversal[B]): List[B] = p match {
6 case Empty() => Nil
7 case Value(_) => Nil
8 case Parse(p, m) => List(f.run(p, m))
9 case Ap(p, a) => traversal(p, f) ++ traversal(a, f)
10 case Alt(p1, p2) => traversal(p1, f) ++ traversal(p2, f)
11 }