A large source of type-system bugs relates to using AtomType to represent both unresolved (with type variables) and fully-resolved types together. It would reduce the bug potential to separate them into two, perhaps as:
data UnresolvedAtomType = TypeVariableType TypeVariableName | ResolvedAtomType
data ResolvedAtomType = IntegerAtomType | ...
A large source of type-system bugs relates to using
AtomType
to represent both unresolved (with type variables) and fully-resolved types together. It would reduce the bug potential to separate them into two, perhaps as: