【发布时间】:2021-06-22 17:18:38
【问题描述】:
我是 Haskell 编程和学习类型系统的新手,我无法掌握空数据构造函数的基础。..
以以下为例:
data Color = Red | Green | Blue | Indigo | Violet deriving Show
genColor:: Color
genColor = Red
据我了解,Red、Green、Blue.. 是无效数据构造函数,在使用时会构造“颜色”。
我难以理解的是,在传统的 OOP 语言中,您必须指定类型底层的原语——例如。颜色是否为字符串、int、float 等。
在 Haskell 中,上面的代码运行良好,为什么不需要呢?像这样构建类型系统的基本原理是什么?谢谢,所有帮助将不胜感激:)
【问题讨论】:
-
几乎每种语言都提供这样的枚举——例如,Java 和 C++ 中的
enum、Scala 中的Enumeration或 Python 中的Enum。 -
数据构造函数是原语。基本上,该语言允许您为新类型定义文字。
Red不仅仅是一个“真实”值为0或"Red"的变量;Red是值。 -
@DanielWagner IIRC,
Enums 在 Python 中有点不满意,因为它们确实需要一些其他值来识别它们,它们不能只是“做自己”docs.python.org/3.9/library/enum.html -
@DanielWagner C++ 的枚举也有一个基础类型(旧的无范围枚举和新的枚举类)。我认为可以公平地说 Java 的枚举确实没有底层类型,尽管它们确实公开了一个您可以获取的标签。
标签: haskell