Как написать функцию, которая обрабатывает тип Union в Dhall - PullRequest
3 голосов
/ 26 января 2020

Я пытаюсь понять, как работает программирование в Dhall. Рассмотрим следующий тип объединения:

let Object = < NoId | WithId : Text >

Я хочу написать функцию extractId, которая возвращает Optional Text, содержащую Id (или None), но я не могу найти способ сделать разрушение в Dhall.

1 Ответ

3 голосов
/ 26 января 2020

Ответ заключается в использовании функции merge. Ожидается набор с одной функцией-обработчиком для каждого конструктора типа объединения. Таким образом, чтобы превратить вышеприведенный пример объединения в Optional Text, мы можем сделать:

let someObject = Object.NoId

let handlers = { NoId = None Text, WithId = λ(t : Text) → Some t }

in  merge handlers someObject

...