Gleam의 불투명 타입은, 그 타입을 정의한 모듈에서만 값을 생성하거나 패턴 매칭할 수 있는 사용자 정의 타입이에요. 특정한 방식으로만 사용해야 하는 타입을 만들 때 유용해요.
불투명 타입은 opaque 키워드로 정의해요.
pub opaque type PositiveInt {
PositiveInt(inner: Int)
}
이 PositiveInt 타입은 정수가 필요한 상황에서 쓰이는데, 그 값이 0 이상이어야 해요. 일반적인 Gleam Int는 음수도 될 수 있기 때문에 여기에 쓸 수 없어요.
이 타입을 정의한 모듈에서는 내부의 정숫값을 가져오는 함수와, 값이 양수가 아니면 오류를 반환하는 PositiveInt 생성 함수를 정의할 수 있어요.
pub fn from_int(i: Int) -> Result(PositiveInt, String) {
case i {
_ if i < 0 -> Error("Value must be positive")
_ -> Ok(PositiveInt(i))
}
}
pub fn to_int(i: PositiveInt) -> Int {
i.inner
}
이런 API가 있으면 다른 모듈에서는 음수 값을 가진 PositiveInt를 만들 수 없어요. 따라서 PositiveInt를 받는 함수는 그 값이 양수임을 확신할 수 있어요.