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)