是否有描述
数据类型的词即。描述了这些类型
data Bool = False | True
data Maybe a = Nothing | Just a
data Either l r = Left l | Right r
但不包括这些类型
data Ordering = LT | EQ | GT -- too many constructors
data () = () -- too few constructors
data [a] = a | a : [a] -- recursive definition
答案 0 :(得分:3)
我认为拥有两个构造函数的特性是毫无意义的。想象一下类型:
data StrictOrdering = LT | GT
data Ordering' = EQ | NEQ !StrictOrdering
类型Ordering'
等同于您提到的Ordering
,仅在'2-constructorness'中有所不同。
另一方面,Maybe Bool
,Either Bool Bool
和Bool
非常不同,除了称为“和类型”外,似乎不值得使用相同的名称。
现在,人们可能会发现exists a. Maybe a
和Bool
之间存在一些相似之处,但是要指出它们需要更多的约束而不仅仅是'2-constructorness'。
答案 1 :(得分:2)
“有两个构造函数”是一个很少有关于这种类型可以表示什么的信息的属性。这意味着强制弱头正规形式(WHNF)允许在case语句中进行二元选择。也许您可以将其称为 “双头型” 来拼写短语。
GHC作为一种在RAM中为数据创建优化表示的方法更有用,因为GHC uses pointer tagging有助于最多4个构造函数(或64位计算机上的8个)。
答案 2 :(得分:1)
非递归的双构造函数sum-type
怎么样?答案 3 :(得分:0)
二元和/副产品类型(两种类型)怎么样?