Pushes the input text matched by its inner rule onto the value stack after its inner rule has been run successfully (and only then).
Pushes the input text matched by its inner rule onto the value stack after its inner rule has been run successfully (and only then).
Drops one or more values from the top of the value stack.
Drops one or more values from the top of the value stack.
E.g. drop[Int]
will drop the top
value and Int
drop[Int :: String :: HNil]
will drop the top two values,
which must be an
underneath a Int
(the string being the top stack element).
String
Pushes the given value onto the value stack.
Pushes the given value onto the value stack.
- if T
is Unit
nothing is pushed (i.e. push
with a block/expression evaluating to Unit
is identical to run
)
- if T <: HList
all values of the HList is pushed as individual elements
- otherwise a single value of type T
is pushed.
Runs the given block / expression / action function.
Runs the given block / expression / action function.
A run
rule can have several shapes, depending on its argument type. If the arg
evaluates to
- a rule (i.e. has type R <: Rule[_, _]
) the result type of run
is this rule's type (i.e. R
) and the
produced rule is immediately executed.
- a function with 1 to 5 parameters these parameters are mapped against the top of the value stack, popped
and the function executed. Thereby the function behaves just like an action function for the ~>
operator,
i.e. if it produces a Unit value this result is simply dropped. HList results are pushed onto the value stack
(all their elements individually), rule results are immediately executed and other result values are pushed
onto the value stack as a single element.
- a function with one HList parameter the behavior is similar to the previous case with the difference that the
elements of this parameter HList are mapped against the value stack top. This allows for consumption of an
arbitrary number of value stack elements. (Note: This feature of
is not yet currently implemented.)run
- any other value the result type of run
is an always succeeding Rule0
.
NOTE: Even though the block is not a call-by-name parameter it will be executed
for every rule application anew! (Since the expression is directly transplanted
into the rule method by the rule
macro.
Implements a semantic predicate.
Implements a semantic predicate. If the argument expression evaluates to true
the created
rule matches otherwise it doesn't.