Polymorphic User Types¶
Kind 2 supports polymorphic user types,
which are user-defined types that contain type parameters.
An example is a polymorphic user-defined Pair type,
declared as type Pair<<T; U>> = [T, U];.
A polymorphic user-defined type T is instantiated with T<<...>>
syntax (analogous to polymorphic nodes and node calls)
as in the following examples.
type Pair<<T; U>> = [T, U];
node SwapIntBool(x: Pair<<int; bool>>) returns (y: Pair <<bool; int>>)
let
y = {x.%1, x.%0};
tel
node SwapGeneric<<T; U>>(x: Pair<<T; U>>) returns (y: Pair <<U; T>>)
let
y = {x.%1, x.%0};
tel
In other words, Pair (or any other user-defined polymorphic type) can
be viewed as as a type constructor which takes types as inputs
and returns a type.