为什么Haskell数据构造函数不需要原语?
我是 Haskell 编程和学习类型系统的新手,并且无法掌握空数据构造函数的基础。
以以下为例:
data Color = Red | Green | Blue | Indigo | Violet deriving Show
genColor:: Color
genColor = Red
根据我的理解,Red、Green、Blue .. 是空数据构造函数,在使用时会构造“颜色”。
我无法理解的是,在传统的 OOP 语言中,您必须指定类型底层的原始类型——例如。颜色是否是字符串、整数、浮点数等。
在 Haskell 中,上面的代码运行得很好,为什么不需要呢?像这样构建类型系统的基本原理是什么?谢谢,所有帮助将不胜感激:)
回答
我想起一个极好的1个由亚历克西斯王的博客文章:类型为公理。它将您假设的减法视角(“我定义了一个枚举类型来限制变量可能采用的整数值集,并为清晰起见给出这些整数名称”)与代数数据类型真正涉及的加法视角( “既然我在定义一个全新的类型,我也必须定义一个全新的价值来适应它,它与任何其他类型的价值没有特别的关系”)。
1冗余,因为她所有的博客文章都很棒