یک نوع زمانی «نوع عمومی» است که با استفاده از یک «پارامتر نوع» بتواند مقادیری از هر نوع را در خود نگه دارد.
برای مثال، این نوع 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)