This patch tides up the structure, simplifying FlattenTvResult. It also replaces a use of zonkTcType (which I hated) with coercionKind, in that same function. Happily, the result is little faster, maybe even a percentage point or two, which is a lot for a compiler. This also removes the line || not (map binderVisibility bndrs1 == map binderVisibility bndrs2) from TcCanonical.can_eq_nc', in the ForAllTy/ForAllTy case. Why? Becuase I can't see why binder-visiblity should matter, and when we use coercionKind instead of zonkTcType in flattenTyVar, this case pops up and rejects a program that should pass. I did discuss this with Richard.
Showing with 50 additions and 51 deletions