Disallow basic supertypes of complex types
From Erik:
Since the type system described in mottr is somewhat unrestricted it allows for basic types (other than Top) as supertypes of both lists and constants. For example something like "TopInteger" as the smallest supertype of both Integer and List. It seems to me that the spec is still well-defined in such cases in the sense that there's no ambiguity, but it doesn't work like one might intend with a type like TopInteger. E.g., I would expect the list (1, 2, 3) as argument for a parameter with type TopInteger to be consistently typed. It's not though, because (1, 2, 3) has type NEList<LUB> which is not compatible with TopInteger (even with my adjustments to compatibility above). Since the spec is still well-defined nothing strictly needs to be done there, but it should be noted that these types maybe don't work as expected and should possibly be disallowed by specifying that Top is the only basic type that is a supertype of list types.