It appears that the generic signature builder resolves types twice because the availability of the generic environment can influence diagnostics (see
revertGenericFuncSignature() and its uses). This seems unfortunate and inefficient. Should AST node validation be tri-state? For example, default to "unknown", and allow one-way transitions to either "valid" or "invalid". Finally, assert in the AST verifier that all nodes are either valid or invalid. What do people think about this added level of discipline? Being "known valid" would let us bypass the redundant type resolving.