### Generic abstractions [ Type abstractions Funcon abstraction Funcon closure Funcon enact ] Meta-variables T <: values T? <: values? Type abstractions(_:computation-types) Funcon abstraction(_:T?=>T) : abstractions(T?=>T) /* The funcon `abstraction(X)` forms abstraction values from computations. References to bindings of identifiers in `X` are dynamic. The funcon `closure(X)` forms abstractions with static bindings. */ Funcon closure(_:T?=>T) : =>abstractions(T?=>T) /* `closure(X)` computes a closed abstraction from the computation `X`. In contrast to `abstraction(X)`, references to bindings of identifiers in `X` are static. Moreover, `closure(X)` is not a value constructor, so it cannot be used in pattern terms in rules. */ Rule environment(Rho) |- closure(X) ---> abstraction(closed(scope(Rho, X))) Funcon enact(_:abstractions(T?=>T)) : T?=>T /* `enact(A)` executes the computation of the abstraction `A`, with access to all the current entities. */ Rule enact(abstraction(X)) ~> X