Un tipo è un tipo generico quando può contenere valori di qualsiasi tipo usando un parametro di tipo.
Per esempio, questo tipo Box ha il parametro di tipo a (scritto con lettere minuscole).
pub type Box(a) {
Box(a)
}
Il parametro di tipo a è un segnaposto per qualsiasi tipo, quindi Box può essere usato con stringhe, interi o qualsiasi altro tipo.
Box("Hello, Joe!") // The type is Box(String)
Box(42) // The type is Box(Int)
Un tipo può avere più parametri di tipo separati da virgole.
pub type Pair(a, b) {
Pair(a, b)
}
I parametri di tipo si possono usare anche negli argomenti delle funzioni.
Questa funzione prende un valore di tipo a e chiama due volte una funzione che prende un a e restituisce un b.
pub fn twice(value: a, f: fn(a) -> b) -> b {
f(value)
f(value)
}
// The type is fn(String, fn(String) -> Nil) -> Nil
twice("Hello, Joe!", io.println)
In questo esercizio scriverai un TreasureChest generico (e magico!) per custodire un tesoro.
Definisci un tipo personalizzato TreasureChest con una sola variante.
La variante deve avere un valore String associato, che verrà usato per memorizzare la password del forziere.
La variante deve avere anche un valore generico associato, che verrà usato per memorizzare il tesoro. Questo valore è generico, così il tesoro può essere qualsiasi cosa.
Definisci un tipo personalizzato UnlockResult con due varianti.
La prima variante deve essere Unlocked e deve contenere un valore generico, che verrà usato per memorizzare il tesoro.
La seconda variante deve essere WrongPassword, che non contiene alcun valore.
Questa funzione deve accettare due parametri
TreasureChest
String (per provare una password)Questa funzione deve confrontare il tentativo di password fornito con la String contenuta nel TreasureChest.
La funzione deve restituire un UnlockResult.
Se le password corrispondono, restituisci Unlocked con il valore generico contenuto nel TreasureChest (il tesoro!)
Se le password non corrispondono, restituisci WrongPassword.
Iscriviti a Exercism per imparare e padroneggiare Gleam con 33 concetti122 esercizi e il mentoring di persone reali, tutto gratis.