在Haskell中,代數(shù)數(shù)據(jù)類型(Algebraic Data Types)可以通過data關(guān)鍵字來定義。語法如下:
data TypeName = Constructor1 Type1 Type2 ...
| Constructor2 Type3 Type4 ...
| Constructor3 Type5 Type6 ...
...
其中,TypeName是代數(shù)數(shù)據(jù)類型的名稱,Constructor1、Constructor2等是構(gòu)造子(Constructors),用來表示不同的情況。每個(gè)構(gòu)造子可以帶有參數(shù),參數(shù)的類型可以是任意的。代數(shù)數(shù)據(jù)類型可以有多個(gè)構(gòu)造子,每個(gè)構(gòu)造子可以有不同數(shù)量和類型的參數(shù)。
例如,我們可以定義一個(gè)簡單的代數(shù)數(shù)據(jù)類型來表示顏色:
data Color = Red
| Green
| Blue
在這個(gè)例子中,Color是代數(shù)數(shù)據(jù)類型的名稱,Red、Green、Blue是構(gòu)造子。這個(gè)代數(shù)數(shù)據(jù)類型表示了三種不同的顏色。
另一個(gè)例子是定義一個(gè)代數(shù)數(shù)據(jù)類型來表示二叉樹:
data Tree a = Leaf a
| Node (Tree a) (Tree a)
在這個(gè)例子中,Tree是代數(shù)數(shù)據(jù)類型的名稱,Leaf和Node是構(gòu)造子。Leaf構(gòu)造子表示一個(gè)葉子節(jié)點(diǎn),帶有一個(gè)值作為參數(shù);Node構(gòu)造子表示一個(gè)內(nèi)部節(jié)點(diǎn),帶有兩棵子樹作為參數(shù)。