कोई टाइप तब जेनेरिक टाइप होता है जब वह एक टाइप पैरामीटर का इस्तेमाल करते हुए किसी भी टाइप की वैल्यू रख सकता है।
उदाहरण के लिए, इस 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)