Types describe expressions. As is standard in statically-typed programming languages, they are used only for validation purposes and have no real effect on the "output" of a program. The following table gives the grammar of types T. The section on expressions will give the meanings of types in terms of which expressions have which types.




Extern type


List of Ts

T1 -> T2

Function from T1 to T2


Action allowed only when P is satisified; requires no environment variables on input and writes none of its own

[P] {CSymbol1 : T1, ..., CSymbolN : TN}

Action that requires environment variables CSymbol1, ..., CSymbolN to have the given types when run

[P] {CSymbol1_1 : T1_1, ..., CSymbol1_N : T1_N} => {CSymbol2_1 : T2_1, ..., CSymbol2_M : T2_M}

Like the last case, but the second set of typed environment variables describes what the action will write

P => T

A nested action that requires that its nested configuration satisfy P; T should be some action type