An imperative language does have updatable variables. Haskell is a pure functional language. For a functional language, an environment is a mapping from names to values. The simplest way to implement an environment is to use a list of pairs. This is adequate theoretically but for practical use a more efficient data structure must be used.
Environments are ubiquitous in PLs.
A binding occurrence of an identifier is an appearance of the identifier where its binding gets established. An applied occurrence of an identifier is an appearance of the identifier where its binding gets used. All the important modern languages share the same basic scoping discipline. Thus it is usually called static scoping . The scope of a binding extends to the end of the enclosing block.