Recursive occurrences of T may only have type variables as arguments

For technical reasons, when defining a parameterized type, any recursive occurrences of the type in its own definition can only have type variables as arguments. For example, this is perfectly OK:

type T(a) = Unit + a * T(a) * T(a)

Notice how every occurrence of T on the right-hand side of the = has the variable a as an argument.

Even this is OK:

type Alt(a,b) = Unit + a * Alt(b,a)

In this example, the Alt on the right-hand side of the = has its arguments in the opposite order from the one on the left-hand side, but that is OK as long as they are all type variables.

These examples, on the other hand, are not OK:

type Bad1(a) = Unit + Bad1(N)
type Bad2(a) = Unit + Bad2(Bad2(a))