Un type est un type générique lorsqu'il peut contenir des valeurs de n'importe quel type au moyen d'un paramètre de type.
Par exemple, ce type Box possède le paramètre de type a (écrit avec des lettres minuscules).
pub type Box(a) {
Box(a)
}
Le paramètre de type a est un espace réservé pour n'importe quel type, donc Box peut être utilisé avec des strings, des entiers ou n'importe quel autre type.
Box("Hello, Joe!") // The type is Box(String)
Box(42) // The type is Box(Int)
Un type peut avoir plusieurs paramètres de type, séparés par des virgules.
pub type Pair(a, b) {
Pair(a, b)
}
On peut aussi utiliser des paramètres de type dans les arguments des fonctions.
Cette fonction prend une valeur de type a et appelle deux fois une fonction qui prend un a et renvoie 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)
Dans cet exercice, tu vas écrire un TreasureChest générique (et magique !), pour y ranger un trésor.
TreasureChest
Définis un type personnalisé TreasureChest avec une seule variante.
Cette variante doit avoir une valeur String associée, qui servira à stocker le mot de passe du coffre au trésor.
Elle doit aussi avoir une valeur générique associée, qui servira à stocker le trésor. Cette valeur est générique pour que le trésor puisse être n'importe quoi.
UnlockResult
Définis un type personnalisé UnlockResult avec deux variantes.
La première variante est Unlocked et contient une valeur générique, qui servira à stocker le trésor.
La deuxième variante est WrongPassword, qui ne contient aucune valeur.
get_treasure
Cette fonction prend deux paramètres
TreasureChest
String (pour essayer un mot de passe)Cette fonction doit comparer le mot de passe fourni avec la String contenue dans le TreasureChest.
La fonction doit renvoyer un UnlockResult.
Si les mots de passe correspondent, renvoie Unlocked avec la valeur générique du TreasureChest (le trésor !)
Si les mots de passe ne correspondent pas, renvoie WrongPassword.
Inscris-toi sur Exercism pour apprendre et maîtriser Gleam avec 33 concepts122 exercices, et un vrai mentorat humain, le tout gratuitement.