2011-08-31 22 views
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 
+0

只是出於好奇,你爲什麼要問? –

+0

我很好奇:-) – dave4420

+0

AFAIK沒有這個詞。也許這是有原因的。 – Ingo

回答

1

如何非遞歸的兩個構造和類型

+0

有點長。爲什麼要「產品」? – dave4420

+0

它不是產品類型(元組)。這是一個總和類型(聯合)。 –

+0

@Jon oops ...... – fuz

3

我認爲只有兩個構造函數的特徵是毫無意義的。試想類型:

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

類型Ordering'相當於Ordering你所提到的,只有在「2 constructorness」不同。

另一方面,Maybe Bool,Either Bool BoolBool是非常不同的,似乎不應該被稱爲'和類型'相同的名稱。

現在,人們可能會發現exists a. Maybe aBool之間有一些相似之處,但指出一個需要更多的約束,而不僅僅是'2構造函數'。

2

「擁有兩個構造函數」是一個屬性,它只包含很少關於可以用這種類型表示的信息。這意味着強迫弱頭正常形式(WHNF)允許在case語句中進行二元選擇。也許你可以稱它爲「雙頭類型」來產生一個短語。

由於GHC uses pointer tagging有助於最多4個構造函數(或64位機器上的8個構造函數),所以GHC作爲一種在RAM中爲數據創建優化表示的方法更爲有用。

0

二元和/副產品類型(兩種類型)呢?

相關問題