Um tipo é um tipo genérico quando pode conter valores de qualquer tipo através de um parâmetro de tipo.
Por exemplo, este tipo Box tem o parâmetro de tipo a (escrito com letras minúsculas).
pub type Box(a) {
Box(a)
}
O parâmetro de tipo a é um marcador de posição para qualquer tipo, por isso Box pode ser usado com strings, inteiros ou qualquer outro tipo.
Box("Hello, Joe!") // The type is Box(String)
Box(42) // The type is Box(Int)
Um tipo pode ter vários parâmetros de tipo, separando-os por vírgulas.
pub type Pair(a, b) {
Pair(a, b)
}
Os parâmetros de tipo também podem ser usados nos argumentos de funções.
Esta função recebe um valor do tipo a e chama duas vezes uma função que recebe um a e devolve um 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)
Neste exercício vais escrever um tipo personalizado TreasureChest genérico (e mágico!), para guardar algum tesouro.
Define um tipo personalizado TreasureChest com uma única variante.
A variante deve ter um valor String associado, que será usado para guardar a palavra-passe do baú do tesouro.
A variante deve também ter um valor genérico associado, que será usado para guardar o tesouro. Este valor é genérico para que o tesouro possa ser qualquer coisa.
Define um tipo personalizado UnlockResult com duas variantes.
A primeira variante deve ser Unlocked e deve conter um valor genérico, que será usado para guardar o tesouro.
A segunda variante deve ser WrongPassword, que não contém nenhum valor.
Esta função deve receber dois parâmetros
TreasureChest
String (para tentar uma palavra-passe)Esta função deve comparar a tentativa de palavra-passe fornecida com a String no TreasureChest.
A função deve devolver um UnlockResult.
Se as palavras-passe coincidirem, devolve Unlocked com o valor genérico do TreasureChest (o tesouro!)
Se as palavras-passe não coincidirem, devolve WrongPassword.
Inscreve-te no Exercism para aprenderes e dominares Gleam com 33 conceitos122 exercícios, e mentoria humana real, tudo grátis.