DSL values have types drawn from .We define, :

with .For an expression, *e*, the sequence comprehension

yields the sequence of successive values of *e* obtained when *i* is bound
to successive values in *A*.

For example, the sample program:

A = range(3); B = (/ i in A: i + i /); C = (/ i in A: (/ j in range(i): i /) /)

yields:

A = (/ 1, 2, 3 /) B = (/ 2, 4, 6 /) C = (/ (/ 1 /), (/ 2, 2 /), (/ 3, 3, 3 /) /)

We omit here a collection of type (inference) rules for the language that define a well-typed program.