Тип є узагальненим типом, коли він може містити значення будь-якого типу за допомогою параметра типу.
Наприклад, цей тип Box має параметр типу a (записується малими літерами).
pub type Box(a) {
Box(a)
}
Параметр типу a є заповнювачем для будь-якого типу, тому Box можна використовувати з рядками тексту (англ. string), цілими числами чи будь-яким іншим типом.
Box("Hello, Joe!") // The type is Box(String)
Box(42) // The type is Box(Int)
Тип може мати кілька параметрів типу, якщо розділити їх комами.
pub type Pair(a, b) {
Pair(a, b)
}
Параметри типу можна також використовувати в аргументах функцій.
Ця функція приймає значення типу a і двічі викликає функцію, яка приймає a та повертає 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)
У цій вправі ми напишемо узагальнений (/ чарівний!) TreasureChest, щоб зберігати скарби.
Визначте власний тип TreasureChest з одним варіантом.
Варіант повинен мати повʼязане значення String, яке зберігатиме пароль від скрині зі скарбами.
Варіант також повинен мати повʼязане узагальнене значення, яке зберігатиме скарб. Це значення узагальнене, тож скарбом може бути будь-що.
Визначте власний тип UnlockResult з двома варіантами.
Перший варіант має називатися Unlocked і містити узагальнене значення, яке зберігатиме скарб.
Другий варіант має називатися WrongPassword і не містить жодних значень.
Ця функція має приймати два параметри
TreasureChest
String (щоб спробувати пароль)Ця функція має звірити надану спробу пароля зі String у TreasureChest.
Функція має повертати UnlockResult.
Якщо паролі збігаються, поверніть Unlocked з узагальненим значенням із TreasureChest (тобто зі скарбом!)
Якщо паролі не збігаються, поверніть WrongPassword.
Зареєструйтеся на Exercism, щоб вивчати й опановувати Gleam, а також 33 концепції122 вправи та справжнє наставництво від людей, і все це безкоштовно.