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)