No Russell expression with type signature may mention a variable
(identifier with var signature) which is not local to that expression.
The same restriction applies to function constructions, since these could
conceivably be invoked from inside a type expression.
This applies both to explicit, programmer-written expressions, and
to expressions in signatures computed by the compiler.  For example, if
f has signature

        func [x: val Short] val Array[x, Float]

and if n is an integer variable then f[V[n]] would have signature

        val Array[V[n], Float]

and is therefore an import rule violation.  (This could be avoided by
first binding an identifier to V[n] and the using it as the argument
of f.)

The -L flag to the compiler implies that the rule is not checked for
function constructions whose last parameter has var Void signature.  (More
precisely, it is not checked if the innermost expression that is either
type valued or is a function construction in which the identifier occurs is
a function construction whose last parameter has var Void signature.)
This makes it possible to simulate lazy evaluation etc., and still maintain
type safety.  (It does make it harder to reason about the behaviour of
functions with var Void parameters.)
