Just as values are built using data constructors, types are built from type constructors. Nullary type constructors like Nat
, Int
, Float
are already types, but other type constructors like List
and ->
(see built-in type constructors) take type parameters in order to yield types. List
is a unary type constructor, so it takes one type (the type of the list elements), and ->
is a binary type constructor. List Nat
is a type and Nat -> Int
is a type.