=== Evaluation ===
Avalog supports injection of evaluation role into expressions
for easier evaluation in advanced modeling.
For example:
x : val
(f(x), x)
eval val
(f(f(x)), x)
The directive `eval val` expands `(f(f(x)), x)` into:
(f(val(f(x))), x)
Here, `val` is the role used for evaluation.
Notice that the role is not injected for top expressions.
Similarly `(f(f(f(x))), x)` would be expanded to:
(f(val(f(val(f(x))))), x)
The directive `no eval` turns off injection of evaluation role.
The reason roles are injected like this,
is because Avatar Logic can have multiple dimensions of evaluation.