4

有没有一个词描述数据类型

  1. 正好有两个构造函数;和
  2. 不是递归的吗?

即描述这些类型

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
4

4 回答 4

3

我认为恰好有两个构造函数的特性是毫无意义的。想象一下类型:

data StrictOrdering = LT | GT
data Ordering' = EQ | NEQ !StrictOrdering

该类型Ordering'等同于Ordering您提到的类型,仅在“2-constructorness”方面有所不同。

另一方面,Maybe BoolEither Bool Bool非常Bool不同,除了被称为“总和类型”之外,似乎不应该使用相同的名称。

exists a. Maybe a现在,人们可能会发现和之间有一些相似之处Bool,但要指出它们需要更多的约束,而不仅仅是“2-构造函数”。

于 2011-08-31T11:52:52.603 回答
2

“有两个构造函数”是一个属性,它几乎没有关于这种类型可以表示什么的信息。这意味着强制弱头正常形式(WHNF)允许在 case 语句中进行二元选择。也许您可以将其称为“双头型”来创造一个短语。

GHC 作为一种在 RAM 中为数据创建优化表示的方法更有用,因为GHC 使用指针标记,这有助于类型多达 4 个构造函数(或 8 在 64 位机器上)。

于 2011-08-31T13:18:01.020 回答
1

非递归的二构造函数 sum-type怎么样?

于 2011-08-31T09:12:12.467 回答
0

二进制和/副产品类型(两种类型)呢?

于 2011-08-31T13:20:03.770 回答