Οι αδιαφανείς τύποι στη 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 μπορεί να είναι σίγουρη ότι η τιμή είναι θετική.