The reason for this is that the sequential composition combinator (~) combines its constituents
into a ~. When several ~s are combined, this results in nested ~s (to the left).
The flatten* coercions makes it easy to apply an n-argument function to a nested ~ of
depth n-1
The headOptionTailToFunList converts a function that takes a List[A] to a function that
accepts a ~[A, Option[List[A]]] (this happens when parsing something of the following
shape: p ~ opt("." ~ repsep(p, ".")) -- where p is a parser that yields an A).
This object contains implicit conversions that come in handy when using the
^^
combinator.
Refer to scala.util.parsing.combinator.Parsers to construct an AST from the concrete syntax.
The reason for this is that the sequential composition combinator (
~
) combines its constituents into a ~. When several~
s are combined, this results in nested~
s (to the left). Theflatten*
coercions makes it easy to apply ann
-argument function to a nested~
of depthn-1
The
headOptionTailToFunList
converts a function that takes aList[A]
to a function that accepts a~[A, Option[List[A]]]
(this happens when parsing something of the following shape:p ~ opt("." ~ repsep(p, "."))
-- wherep
is a parser that yields anA
).