Further improvements to well-kinded types
authorSimon Peyton Jones <simonpj@microsoft.com>
Wed, 13 Dec 2017 12:53:26 +0000 (12:53 +0000)
committerSimon Peyton Jones <simonpj@microsoft.com>
Wed, 13 Dec 2017 16:03:46 +0000 (16:03 +0000)
commit0a12d92a8f65d374f9317af2759af2b46267ad5c
tree4ed2fb5adcc85194c0b9d2dcca543b45c1689df5
parent63e968a9dd915fc0f5819589b6830603f563902f
Further improvements to well-kinded types

The typechecker has the invariant that every type should be well-kinded
as it stands, without zonking.  See Note [The well-kinded type invariant]
in TcType.

That invariant was not being upheld, which led to Trac #14174.  I fixed
part of it, but T14174a showed that there was more.  This patch finishes
the job.

* See Note [The tcType invariant] in TcHsType, which articulates an
  invariant that was very nearly, but not quite, true.  One place that
  falisified it was the HsWildCardTy case of tc_hs_type, so I fixed that.

* mkNakedCastTy now makes no attempt to eliminate casts; indeed it cannot
  lest it break Note [The well-kinded type invariant].  The prior comment
  suggested that it was crucial for performance but happily it seems not
  to be. The extra Refls are eliminated by the zonker.

* I found I could tidy up TcHsType.instantiateTyN and instantiateTyUntilN
  by eliminating one of its parameters.  That led to a cascade of minor
  improvements in TcTyClsDecls. Hooray.
compiler/typecheck/TcHsType.hs
compiler/typecheck/TcTyClsDecls.hs
compiler/typecheck/TcType.hs
testsuite/tests/polykinds/T7524.stderr
testsuite/tests/polykinds/all.T
testsuite/tests/typecheck/should_fail/T6018failclosed.stderr