是否有一个单词意味着“具有两个构造函数的非递归数据类型”?

时间:2011-08-31 09:03:17

标签: haskell naming nomenclature algebraic-data-types

是否有描述

数据类型的词
  1. 正好有两个构造函数;和
  2. 不是递归的?
  3. 即。描述了这些类型

    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 个答案:

答案 0 :(得分:3)

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

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

类型Ordering'等同于您提到的Ordering,仅在'2-constructorness'中有所不同。

另一方面,Maybe BoolEither Bool BoolBool非常不同,除了称为“和类型”外,似乎不值得使用相同的名称。

现在,人们可能会发现exists a. Maybe aBool之间存在一些相似之处,但是要指出它们需要更多的约束而不仅仅是'2-constructorness'。

答案 1 :(得分:2)

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

GHC作为一种在RAM中为数据创建优化表示的方法更有用,因为GHC uses pointer tagging有助于最多4个构造函数(或64位计算机上的8个)。

答案 2 :(得分:1)

非递归的双构造函数sum-type

怎么样?

答案 3 :(得分:0)

二元和/副产品类型(两种类型)怎么样?