The union construction allows the creation of disjoint union types. Union type values can be thought of as having one of several different types. Values must however be interpreted consistently. A union construction has syntax: union local_type_id { param_list } where param_list is a semi-colon spearated list, with each element of the form id: signature Multiple identifiers with the same signature can be combined, as with function parameters. Var signatures are not allowed. The signature of the union union t {id1: sig1; ...; idn: sign} is type t { New; :=; ValueOf; to_id1: func[val t] sig1; from_id1: func[sig1] val t; is_id1: func[val t] val Boolean; ... to_idn: func[val t] sign; from_idn: func[sign] val t; is_idn: func[val t] val Boolean; } The "to_" functions are used to convert a union value to one of the component types. They may only be applied if the union value was created with the corresponding "from_" function. The "is_" functions are used to inquire about the correct interpretation of a union value. Since types and functions can appear as components, single element unions can, like products, be used to obtain a type of "assignable functions", or "assignable types". Implementation Note: Runtime checks are performed for "to_". The code to do such checks is currently removed by the -O optimizer.