如何在Dhall编程语言中定义类似于Haskell的求和类型的求和类型?
例如,如果我在Haskell中定义
data SumProp = Option1 | Option2
Run Code Online (Sandbox Code Playgroud)
我的目的是在Dhall中定义一条记录,在该记录中其属性之一具有一组有限的可能值:
\(sumPropValue : SumProp) -> { value = sumPropValue }
Run Code Online (Sandbox Code Playgroud)
我相信这样做的标准方法是创建一个联合类型,其中每个选项的类型都是一个空记录:
$ dhall > SumProp <<EOF
< option1 : {} | option2 : {} >
EOF
Run Code Online (Sandbox Code Playgroud)
此类型允许以下值:
< option1 = {=} | option2 : {} >
< option2 = {=} | option1 : {} >
Run Code Online (Sandbox Code Playgroud)
尽管您显然希望将这些命名为方便的名称,例如option1和option2:
$ 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。