Ένας τύπος είναι γενικός τύπος όταν μπορεί να περιέχει τιμές οποιουδήποτε τύπου χρησιμοποιώντας μια παράμετρο τύπου.
Για παράδειγμα, αυτός ο τύπος Box έχει την παράμετρο τύπου a (γραμμένη με πεζά γράμματα).
pub type Box(a) {
Box(a)
}
Η παράμετρος τύπου a είναι ένα σύμβολο κράτησης θέσης για οποιονδήποτε τύπο, οπότε ο Box μπορεί να χρησιμοποιηθεί με συμβολοσειρές, ακέραιους ή οποιονδήποτε άλλο τύπο.
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)