গ্লেমে অপেক টাইপ হলো কাস্টম টাইপ, যেখানে কেবল যে মডিউল টাইপটি ডিফাইন করে, সেই মডিউলই টাইপটির মান তৈরি করতে বা প্যাটার্ন ম্যাচ করতে পারে। এটি এমন টাইপ তৈরির কাজে দরকারি, যেগুলো কেবল একটি নির্দিষ্ট উপায়ে ব্যবহার করা উচিত।
অপেক টাইপ opaque কিওয়ার্ড দিয়ে ডিফাইন করা হয়।
pub opaque type PositiveInt {
PositiveInt(inner: Int)
}
এই PositiveInt টাইপটি এমন পরিস্থিতিতে ব্যবহার করা হয় যেখানে একটি ইন্ট দরকার, কিন্তু সেটি শূন্য বা তার চেয়ে বড় হতে হবে। সাধারণ গ্লেম 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 নেয়, সে নিশ্চিত থাকতে পারে যে মানটি ধনাত্মক।