يكون النوع نوعًا عامًّا عندما يستطيع أن يحتوي على قيم من أي نوع باستخدام معامل نوع.
على سبيل المثال، هذا النوع 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)