如何在Dhall中定义和使用类似Haskell的求和类型

时间:2018-07-28 19:04:06

标签: haskell dhall

如何在Dhall编程语言中定义类似于Haskell的求和类型的求和类型?

例如,如果我在Haskell中定义

data SumProp = Option1 | Option2

我的目的是在Dhall中定义一条记录,该记录的其中一个属性具有一组有限的可能值:

\(sumPropValue : SumProp) -> { value = sumPropValue }

1 个答案:

答案 0 :(得分:4)

我认为,完成此操作的标准方法是创建一个联合类型,其中每个选项的类型均为空记录:

$ dhall > SumProp <<EOF
< option1 : {} | option2 : {} >
EOF

此类型允许使用以下值:

< option1 = {=} | option2 : {} >
< option2 = {=} | option1 : {} >

尽管您显然希望将这些命名为方便的名称,例如option1option2

$ dhall > option1 <<EOF
< option1 = {=} | option2 : {} >
EOF
$ dhall > option2 <<EOF
< option2 = {=} | option1 : {} >
EOF

如果您搜索类型OperatingSystem的定义,Gabriel Gonzalez Typed Nix programming using Dhall 的这篇博客文章包括一个示例。