[commit: ghc] master: Remove the type-checking knot. (f8618a9)
git at git.haskell.org
git at git.haskell.org
Wed Aug 1 18:42:54 UTC 2018
Repository : ssh://git@git.haskell.org/ghc
On branch : master
Link : http://ghc.haskell.org/trac/ghc/changeset/f8618a9b15177ee8c84771b927cb3583c9cd8408/ghc
>---------------------------------------------------------------
commit f8618a9b15177ee8c84771b927cb3583c9cd8408
Author: Richard Eisenberg <rae at cs.brynmawr.edu>
Date: Tue Jul 17 00:12:34 2018 -0400
Remove the type-checking knot.
Bug #15380 hangs because a knot-tied TyCon ended up in a kind.
Looking at the code in tcInferApps, I'm amazed this hasn't happened
before! I couldn't think of a good way to fix it (with dependent
types, we can't really keep types out of kinds, after all), so
I just went ahead and removed the knot.
This was remarkably easy to do. In tcTyVar, when we find a TcTyCon,
just use it. (Previously, we looked up the knot-tied TyCon and used
that.) Then, during the final zonk, replace TcTyCons with the real,
full-blooded TyCons in the global environment. It's all very easy.
The new bit is explained in the existing
Note [Type checking recursive type and class declarations]
in TcTyClsDecls.
Naturally, I removed various references to the knot and the
zonkTcTypeInKnot (and related) functions. Now, we can print types
during type checking with abandon!
NB: There is a teensy error message regression with this patch,
around the ordering of quantified type variables. This ordering
problem is fixed (I believe) with the patch for #14880. The ordering
affects only internal variables that cannot be instantiated with
any kind of visible type application.
There is also a teensy regression around the printing of types
in TH splices. I think this is really a TH bug and will file
separately.
Test case: dependent/should_fail/T15380
>---------------------------------------------------------------
f8618a9b15177ee8c84771b927cb3583c9cd8408
compiler/basicTypes/DataCon.hs | 46 +++----
compiler/iface/BuildTyCl.hs | 14 ++-
compiler/typecheck/FamInst.hs | 2 +-
compiler/typecheck/TcEnv.hs | 11 +-
compiler/typecheck/TcHsSyn.hs | 45 ++++---
compiler/typecheck/TcHsType.hs | 137 ++++++---------------
compiler/typecheck/TcMType.hs | 24 ++--
compiler/typecheck/TcTyClsDecls.hs | 64 +++++-----
compiler/typecheck/TcType.hs | 24 ++--
compiler/types/TyCoRep.hs | 6 +
compiler/types/TyCon.hs | 21 ++--
compiler/types/Type.hs | 25 ++--
.../tests/dependent/should_compile/T14066a.stderr | 2 +-
testsuite/tests/dependent/should_fail/T15380.hs | 20 +++
.../tests/dependent/should_fail/T15380.stderr | 6 +
testsuite/tests/dependent/should_fail/all.T | 2 +-
testsuite/tests/ghci/scripts/T6018ghcifail.stderr | 2 +-
testsuite/tests/polykinds/T7524.stderr | 2 +-
testsuite/tests/th/T10267.stderr | 6 +-
.../tests/typecheck/should_fail/T6018fail.stderr | 5 +-
.../typecheck/should_fail/T6018failclosed.stderr | 4 +-
21 files changed, 232 insertions(+), 236 deletions(-)
Diff suppressed because of size. To see it, use:
git diff-tree --root --patch-with-stat --no-color --find-copies-harder --ignore-space-at-eol --cc f8618a9b15177ee8c84771b927cb3583c9cd8408
More information about the ghc-commits
mailing list