DIS dis -> var arg_1 ... arg_n Macro application
| (dis_1, ... ,dis_n) Tuple, n >= 0
| Cons arg_1 ... arg_n Constructor, n >= 0
| Cons { field_1 = arg_1 , ... , field_n = arg_n } Named fields, n >= 1
| <var/var> arg_1 ... arg_n User-defined functions, n >= 1
| %%Var cv Base DIS
| declare cexp cv in dis Type-cast DIS
Argument arg -> dis
| cv
Variable / C Expression cv -> cexp
| var Variable bound in %dis