递归数据类型

在计算机编程语言中，递归类型（又名：递归定義、隱含類型或隱含定義）是一种特殊的数据类型，它表示自身内部可能包含其它的同样类型的值。

範例 
以下是一個在Haskell中使用链表类型的一个列子：

data List a = Nil | Cons a (List a)

这表示a的链表s可以是一个空表或一个cons单元包含了一个'a'（链表的“头”）和另一个链表（“尾”）。

递归不允许在Miranda语言中和Haskell的同义类型中出现，所以以下的Haskell类型是非法的：
type Bad = (Int, Bad)
type Evil = Bool -> Evil

相反地，表面上是相等的代数数据类型却是可以的：

data Good = Pair Int Good
data Fine = Fun (Bool->Fine)

数据类型
D