어떤 타입이 _타입 매개변수_를 사용해 모든 타입의 값을 담을 수 있으면, 그 타입을 _제네릭 타입_이라고 해요.
예를 들어, 이 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)