如何在Dhall中编写处理Union类型的函数

时间:2020-01-26 17:12:47

标签: functional-programming dhall

我正在努力地思考Dhall中编程的工作原理。考虑以下联合类型:

let Object = < NoId | WithId : Text >

我想编写一个函数extractId,该函数返回包含ID(或Optional Text)的None,但是我找不到在Dhall中进行销毁的方法。

1 个答案:

答案 0 :(得分:3)

答案是使用merge函数。对于联合类型的每个构造函数,都需要一个带有一个处理函数的集合。因此,要将上面的示例联合变成Optional Text,我们可以做到:

let someObject = Object.NoId

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

in  merge handlers someObject