當一個型別能使用_型別參數_來容納任何型別的值時,它就是_泛型型別_。
例如,這個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)