Gleam में ओपेक टाइप एक तरह के कस्टम टाइप होते हैं। ऐसे टाइप की वैल्यू सिर्फ वही मॉड्यूल बना सकता है या उन पर पैटर्न मैच कर सकता है जिसने उस टाइप को बनाया हो। यह ऐसे टाइप बनाने में काम आता है जिनका उपयोग सिर्फ एक तय तरीके से होना चाहिए।
ओपेक टाइप opaque कीवर्ड से बनाए जाते हैं।
pub opaque type PositiveInt {
PositiveInt(inner: Int)
}
इस PositiveInt टाइप का उपयोग तब किया जाता है जब एक पूर्णांक तो चाहिए, लेकिन शून्य या उससे अधिक ही। सामान्य 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 लेता है, वह निश्चित रह सकता है कि वैल्यू धनात्मक ही होगी।