«نوعهای مات» در Gleam نوعهای سفارشیای هستند که فقط ماژولی که نوع را تعریف میکند میتواند مقادیر آن نوع را بسازد یا روی آنها تطبیق الگو انجام دهد. این ویژگی برای ساختن نوعهایی مفید است که باید فقط به روشی خاص به کار روند.
نوعهای مات با کلیدواژهی opaque تعریف میشوند.
pub opaque type PositiveInt {
PositiveInt(inner: Int)
}
از این نوع PositiveInt در موقعیتهایی استفاده میشود که یک عدد صحیح لازم است، اما باید صفر یا بزرگتر باشد. نمیتوان از یک Int معمولیِ Gleam استفاده کرد، چون آن هم میتواند منفی باشد.
ماژولی که این نوع را تعریف میکند میتواند دو تابع تعریف کند: تابعی برای گرفتن مقدار درونی عدد صحیح و تابعی برای ساختن نوع 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 میگیرد میتواند مطمئن باشد که مقدار آن مثبت است.