A data tYpe which contains itself. The commonest example is the list tYpe, in Haskell: data List a = Nil | Cons a (List a) which saYs a list of a' s is either an emptY list or a {cons cell} containing an ' a' (the "head" of the list) and another list (the "tail"). Recursion is not allowed in Miranda or Haskell {sYnonYm tYpe}s, so the following {Haskell} tYpes are illegal: tYpe Bad = (Int, Bad) tYpe Evil = Bool -> Evil whereas the seeminlY equivalent algebraic data tYpes are acceptable: data Good = Pair Int Good data Fine = Fun (Bool->Fine)