首页 > 解决方案 > 为什么 haskell 数据构造函数不需要原语?

问题描述

我是haskell编程和学习类型系统的新手,并且无法掌握空数据构造函数的基础。

举个例子:

data Color = Red | Green | Blue | Indigo | Violet deriving Show

genColor:: Color
genColor = Red 

据我了解,Red、Green、Blue.. 是无效数据构造函数,在使用时会构造“颜色”。

我难以理解的是,在传统的 OOP 语言中,您必须指定类型底层的原语——例如。颜色是否是字符串、整数、浮点数等。

在 Haskell 中,上面的代码运行得非常好,为什么不需要呢?像这样构建类型系统的基本原理是什么?谢谢,所有帮助将不胜感激:)

标签: haskell

解决方案


我想起了Alexis King 的一篇出色的博客文章:Types as Axioms。它将您假设的减法观点(“我定义了一个枚举类型以限制变量可能采用的整数值的集合,并为清楚起见给这些整数命名”)与代数数据类型真正涉及的加法观点( “既然我在定义一个全新的类型,我也必须定义全新的价值观来居住它,这些价值观与任何其他类型的价值观都没有特别的关系”)。


1冗余,因为她所有的博客文章都很棒


推荐阅读