Ein Typ ist ein generischer Typ, wenn er Werte jedes Typs über einen Typparameter enthalten kann.
Zum Beispiel hat dieser Typ Box den Typparameter a (in Kleinbuchstaben geschrieben).
pub type Box(a) {
Box(a)
}
Der Typparameter a ist ein Platzhalter für jeden Typ, also kann Box mit Strings, Ganzzahlen oder jedem anderen Typ verwendet werden.
Box("Hello, Joe!") // The type is Box(String)
Box(42) // The type is Box(Int)
Ein Typ kann mehrere Typparameter haben, indem du sie mit Kommas trennst.
pub type Pair(a, b) {
Pair(a, b)
}
Typparameter können auch in den Argumenten von Funktionen verwendet werden.
Diese Funktion nimmt einen Wert vom Typ a und ruft zweimal eine Funktion auf, die ein a entgegennimmt und ein b zurückgibt.
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)