Re: [GHC] #13985: GHC 8.0 regression: ‘k’ is not in scope during type checking, but it passed the renamer
GHC
ghc-devs at haskell.org
Thu Jul 27 05:29:57 UTC 2017
#13985: GHC 8.0 regression: ‘k’ is not in scope during type checking, but it passed
the renamer
-------------------------------------+-------------------------------------
Reporter: RyanGlScott | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler (Type | Version: 8.0.1
checker) |
Resolution: | Keywords: TypeFamilies
Operating System: Unknown/Multiple | Architecture:
Type of failure: Compile-time | Unknown/Multiple
crash or panic | Test Case:
Blocked By: | Blocking:
Related Tickets: #13738 | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by RyanGlScott):
I tried looking at this, but I'm not nearly smart enough to sort out the
chicken-and-egg problem that I uncovered. I //think// the solution would
be to call
[http://git.haskell.org/ghc.git/blob/d774b4e2de4f07d2432b67010305fede7aeefc78:/compiler/typecheck/TcHsType.hs#l2135
reportFloatingKvs] somewhere in the code that typechecks data family
instances (e.g.,
[http://git.haskell.org/ghc.git/blob/d774b4e2de4f07d2432b67010305fede7aeefc78:/compiler/typecheck/TcInstDcls.hs#l622
tcDataFamInstDecl] seems like a good candidate). However, there's a
serious problem with that: `reportFloatingKvs` needs tyvars to do its
thing, but `tcDataFamInstDecl` starts out only having access to type
patterns, not tyvars.
To obtain tyvars, `tcDataFamInstDecl` calls `tcFamTyPats`, which in turn
calls `kcDataDefn` to kind-check the type patterns. But therein lies the
problem: `kcDataDefn` kind-checks each of the data constructors! By the
time we do this, it's too late, since `k` wasn't rejected yet, so when we
hit `k` when kind-checking a data constructor's existential type
variables, GHC can't find it and throws an internal error.
That is, `reportFloatingKvs` needs tyvars that `tcFamTyPats` produces, but
`tcFamTyPats` can't produce the tyvars because it hits a kind variable
which should have been rejected earlier by `reportFloatingKvs`. Ugh.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/13985#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list