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

Jes*_*spc 3 haskell dhall

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

例如,如果我在Haskell中定义

data SumProp = Option1 | Option2
Run Code Online (Sandbox Code Playgroud)

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

\(sumPropValue : SumProp) -> { value = sumPropValue }
Run Code Online (Sandbox Code Playgroud)

K. *_*uhr 5

我相信这样做的标准方法是创建一个联合类型,其中每个选项的类型都是一个空记录:

$ dhall > SumProp <<EOF
< option1 : {} | option2 : {} >
EOF
Run Code Online (Sandbox Code Playgroud)

此类型允许以下值:

< option1 = {=} | option2 : {} >
< option2 = {=} | option1 : {} >
Run Code Online (Sandbox Code Playgroud)

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

$ dhall > option1 <<EOF
< option1 = {=} | option2 : {} >
EOF
$ dhall > option2 <<EOF
< option2 = {=} | option1 : {} >
EOF
Run Code Online (Sandbox Code Playgroud)

如果您搜索type的定义,Gabriel Gonzalez的这篇博客文章使用Dhall进行Typed Nix编程将包括一个示例OperatingSystem