Trilhas
/
Gleam
Gleam
/
Exercícios
/
Baú de Tesouro
Baú de Tesouro

Baú de Tesouro

Exercício de aprendizagem

Introdução

Genéricos

Um tipo é um tipo genérico quando pode conter valores de qualquer tipo usando 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 espaço reservado para qualquer tipo, então 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, basta separá-los com vírgulas.

pub type Pair(a, b) {
  Pair(a, b)
}

Funções genéricas

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 retorna 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)

Instruções

Neste exercício, você vai escrever um TreasureChest genérico (e mágico!), para armazenar alguns tesouros.

1. Defina o tipo personalizado genérico TreasureChest

Defina um tipo personalizado TreasureChest com uma única variante.

A variante deve ter um valor String associado, que será usado para armazenar a senha do baú de tesouro.

A variante também deve ter um valor genérico associado, que será usado para armazenar o tesouro. Esse valor é genérico para que o tesouro possa ser qualquer coisa.

2. Defina o tipo UnlockResult

Defina um tipo personalizado UnlockResult com duas variantes.

A primeira variante deve ser Unlocked e deve guardar um valor genérico, que será usado para armazenar o tesouro.

A segunda variante deve ser WrongPassword, que não guarda nenhum valor.

3. Defina a função get_treasure

Essa função deve receber dois parâmetros

  • um tipo personalizado genérico TreasureChest
  • uma String (para tentar uma senha)

Essa função deve conferir a tentativa de senha fornecida com a String dentro do TreasureChest.

A função deve retornar um UnlockResult.

Se as senhas coincidirem, retorne Unlocked com o valor genérico do TreasureChest (o tesouro!).

Se as senhas não coincidirem, retorne WrongPassword.

Editar via GitHub O link abre em uma nova janela ou aba
Gleam Exercism

Tudo pronto para começar Baú de Tesouro?

Crie sua conta no Exercism para aprender e dominar Gleam com 33 conceitos122 exercícios e mentoria humana de verdade, tudo de graça.