如何在 Dhall 中定义和使用类似 Haskell 的求和类型
How to define and use a Haskell-like sum type in Dhall
如何在 Dhall 编程语言中定义类似于 Haskell 求和类型的求和类型?
例如,如果在 Haskell 我会定义
data SumProp = Option1 | Option2
我的目的是在 Dhall 中定义一个记录,其中一个属性具有一组有限的可能值:
\(sumPropValue : SumProp) -> { value = sumPropValue }
我相信完成此操作的标准方法是创建一个联合类型,其中每个选项的类型都是一个空记录:
$ dhall > SumProp <<EOF
< option1 : {} | option2 : {} >
EOF
此类型允许以下值:
< option1 = {=} | option2 : {} >
< option2 = {=} | option1 : {} >
尽管您显然希望将它们命名为方便的名称,例如 option1
和 option2
:
$ dhall > option1 <<EOF
< option1 = {=} | option2 : {} >
EOF
$ dhall > option2 <<EOF
< option2 = {=} | option1 : {} >
EOF
Gabriel Gonzalez 的这篇博客文章 Typed Nix programming using Dhall 包含一个示例,如果您搜索类型 OperatingSystem
的定义。
如何在 Dhall 编程语言中定义类似于 Haskell 求和类型的求和类型?
例如,如果在 Haskell 我会定义
data SumProp = Option1 | Option2
我的目的是在 Dhall 中定义一个记录,其中一个属性具有一组有限的可能值:
\(sumPropValue : SumProp) -> { value = sumPropValue }
我相信完成此操作的标准方法是创建一个联合类型,其中每个选项的类型都是一个空记录:
$ dhall > SumProp <<EOF
< option1 : {} | option2 : {} >
EOF
此类型允许以下值:
< option1 = {=} | option2 : {} >
< option2 = {=} | option1 : {} >
尽管您显然希望将它们命名为方便的名称,例如 option1
和 option2
:
$ dhall > option1 <<EOF
< option1 = {=} | option2 : {} >
EOF
$ dhall > option2 <<EOF
< option2 = {=} | option1 : {} >
EOF
Gabriel Gonzalez 的这篇博客文章 Typed Nix programming using Dhall 包含一个示例,如果您搜索类型 OperatingSystem
的定义。