All those aspects of CAML that cannot be described in a purely functional view of the language are known as its imperative qualities
• either because they make sense only with respect to a particular evaluation strategy,
• or because they refer to the machine representation of data structures.
Among the imperative aspects of that first kind, there are exceptions and input-output.
Among the second kind of imperative aspects, we find destructive operations such as assignment. The effect of such operations can be explained completely only by reference to formal semantics or to a description of the implementation of data structures. (We will get to those ideas later in Chapter 12.) However, we can still give ...