=== 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.
