Тип називається узагальненим типом, коли він може містити значення будь-якого типу за допомогою параметра типу.
Наприклад, цей тип Box має параметр типу a (його записують малими літерами).
pub type Box(a) {
Box(a)
}
Параметр типу a є заповнювачем для будь-якого типу, тож Box можна використовувати з рядками тексту (англ. string), цілими числами чи будь-яким іншим типом.
Box("Hello, Joe!") // The type is Box(String)
Box(42) // The type is Box(Int)
Тип може мати кілька параметрів типу, якщо розділити їх комами.
pub type Pair(a, b) {
Pair(a, b)
}
Параметри типу можна також використовувати в аргументах функцій.
Ця функція приймає значення типу a і двічі викликає функцію, яка приймає a та повертає b.
pub fn twice(value: a, f: fn(a) -> b) -> b {
f(value)
f(value)
}
// The type is fn(String, fn(String) -> Nil) -> Nil
twice("Hello, Joe!", io.println)