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.