2
case class Success[+T](t: T) extends ParseResult[T]
4
abstract class Nonterminal[Output] {
6
type SubNonterminal = Nonterminal[T] forSome { type T <: Output }
8
def parse: ParseResult[Output]
10
def parse1(nts: List[SubNonterminal]): ParseResult[Output] =
12
case nt::nts => nt.parse match { case Success(so) => Success(so) }
13
case Nil => throw new Error