Improve TcFlatten.flattenTyVar
authorSimon Peyton Jones <simonpj@microsoft.com>
Fri, 15 Apr 2016 15:17:54 +0000 (16:17 +0100)
committerSimon Peyton Jones <simonpj@microsoft.com>
Fri, 15 Apr 2016 15:33:43 +0000 (16:33 +0100)
commita7ee2d4c4229b27af324ebac93081f692835365d
tree48d76af09e42f9a6020cfda6a4c527643f2c72ea
parentf0e331bd9233669ef615f67e0b9e886b2ff13850
Improve TcFlatten.flattenTyVar

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.
compiler/typecheck/TcCanonical.hs
compiler/typecheck/TcFlatten.hs
testsuite/tests/perf/compiler/all.T