Egy típus akkor generikus típus, ha típusparaméter segítségével bármilyen típusú értéket tartalmazhat.
Például a Box típusnak a a típusparamétere (kisbetűvel írva).
pub type Box(a) {
Box(a)
}
Az a típusparaméter bármilyen típus helyőrzője, így a Box használható stringekkel, egész számokkal vagy bármilyen más típussal.
Box("Hello, Joe!") // The type is Box(String)
Box(42) // The type is Box(Int)
Egy típusnak több típusparamétere is lehet, ezeket vesszővel választjuk el.
pub type Pair(a, b) {
Pair(a, b)
}
A típusparamétereket a függvények argumentumaiban is használhatjuk.
Ez a függvény egy a típusú értéket vesz át, és kétszer meghív egy függvényt, amely átvesz egy a-t, és egy b-t ad vissza.
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)