An actual declarer specifies the mode of the value being created
by a generator. The generator may be either explicit, or the implicit
sample-generator in a variable declaration. For example, in the
following identity declaration the int declarer specified
in the heap generator is an actual declarer:
int datum = heap int;
In the following equivalent variable declarations, the int
declarers are an actual declarer used by the sample-generators:
heap int foo; loc int bar; int baz;
Actual declarers specifying row modes shall include bounds
information. The bounds information provides enough information to
the generators to calculate the total size of the generated value.
For example, the following variable declaration declares a variable
referring to an array of n integers:
[n]int numbers;
Another construct that uses actual declarers is the mode declaration, which associates a name to some given mode. The mode at the right-hand side of a mode declaration shall be specified by an actual declarer. For example, consider the following mode declaration:
mode matrix = [3,3]real;
The declaration above declares a mode matrix to be a
row-row-real, specified by the actual declarer [3,3]real.
The mode indication matrix can now be used to denote that mode,
like for example:
matrix m = heap matrix;
Where the first instance of matrix is used as a formal
declarer and bounds are ignored. The second instance of
matrix is used as an actual declarer, and bounds are
significant.