Un tipo es un tipo genérico cuando puede contener valores de cualquier tipo usando un parámetro de tipo.
Por ejemplo, este tipo Box tiene el parámetro de tipo a (escrito con letras minúsculas).
pub type Box(a) {
Box(a)
}
El parámetro de tipo a es un marcador de posición para cualquier tipo, así que Box se puede usar con strings, ints o cualquier otro tipo.
Box("Hello, Joe!") // The type is Box(String)
Box(42) // The type is Box(Int)
Un tipo puede tener múltiples parámetros de tipo separándolos con comas.
pub type Pair(a, b) {
Pair(a, b)
}
Los parámetros de tipo también se pueden usar en los argumentos de las funciones.
Esta función toma un valor del tipo a y llama dos veces a una función que toma un a y devuelve 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)
En este ejercicio vas a escribir un TreasureChest genérico (¡y mágico!) para guardar algunos tesoros.
Define un tipo personalizado TreasureChest con una sola variante.
La variante debe tener un valor String asociado, que se usará para almacenar la contraseña del cofre del tesoro.
La variante también debe tener un valor genérico asociado, que se usará para almacenar el tesoro. Este valor es genérico para que el tesoro pueda ser cualquier cosa.
Define un tipo personalizado UnlockResult con dos variantes.
La primera variante debe ser Unlocked, y debe contener un valor genérico, que se usará para almacenar el tesoro.
La segunda variante debe ser WrongPassword, que no contiene ningún valor.
Esta función debe recibir dos parámetros:
TreasureChest
String (para probar una contraseña)Esta función debe comparar el intento de contraseña proporcionado con el String del TreasureChest.
La función debe devolver un UnlockResult.
Si las contraseñas coinciden, devuelve Unlocked con el valor genérico del TreasureChest (¡el tesoro!)
Si las contraseñas no coinciden, devuelve WrongPassword.
Regístrate en Exercism para aprender y dominar Gleam con 33 conceptos122 ejercicios y mentoría humana real, todo gratis.