A pattern may have arguments, which may be data-items or virtual patterns

Constant argument

A constant data-item may be specified as follows:

foo(..., X: = T, ...): 
   ...

An actual patrameter must be specified as part of the generation of an instance of foo as in

foo(..., aT, ...)

In the body of foo, X is  constant and may not be assigned new values.

Variable argument

A variable data-item may be specified as follows:

foo(..., X: ? T, ...): 
   ...

An actual patrameter must be specified as part of the generation of an instance of foo as in

foo(..., aT, ...)

In the body of foo, X is variable and may be assigned new values.

Virtual pattern arguments

As mentioned a pattern may have a virtual pattern as an argument and a binding of the virtual pattern must be supplied when an instance is generated.

See the page on virtual patterns.