A data type which contains itself. The commonest example is
data List a = Nil | Cons a (List a)
which says a list of a's is either an empty list or a
conscell containing an 'a' (the "head" of the list) and another
list (the "tail").
type Bad = (Int, Bad)
type Evil = Bool -@# Evil
acceptable:
data Good = Pair Int Good
data Fine = Fun (Bool-@#Fine)