Re: [GHC] #14038: TypeApplications regression in GHC HEAD: ‘p0’ is untouchable inside the constraints: ()
GHC
ghc-devs at haskell.org
Tue Aug 8 22:18:33 UTC 2017
#14038: TypeApplications regression in GHC HEAD: ‘p0’ is untouchable inside the
constraints: ()
-------------------------------------+-------------------------------------
Reporter: RyanGlScott | Owner: (none)
Type: bug | Status: new
Priority: high | Milestone: 8.4.1
Component: Compiler (Type | Version: 8.3
checker) | Keywords:
Resolution: | TypeApplications
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: #13877 | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by goldfire):
My local fix for #12919 ''does'' fix this. But then a deeper bug lurks.
The problem is that the `App` instance for `(:~>)` gets type-checked with
a coercion in its patterns. Of course, the type-family matcher can't deal
with a coercion pattern -- what would such a thing mean anyway? So it does
something stupid. In this case, the stupid thing is that the match result
contains an unbound variable, but it could conceivably do a different
stupid thing tomorrow.
The solution, of course, is to make sure that type patterns never contain
coercions. I've been meaning to do this for a long time, regardless. (I
don't think there's a ticket to track the idea, though.) I see two
possible approaches:
1. Parameterize the code in TcHsType to know whether it's reading a
pattern or a normal type, and don't make coercions in patterns.
2. Have TcHsType proceed normally, but rip the coercions out after-the-
fact.
What to do in the spots where the coercions used to be? Insert bare
coercion variables, which can then be solved for. Some perhaps-outdated
thoughts on this are
[https://ghc.haskell.org/trac/ghc/wiki/DependentHaskell/Internal#Matchingaxioms
here], but those notes were meant more for myself than anyone else.
While we're thinking about this, another question I've pondered for a
while: should type patterns be a separate datatype in GHC than `Type`? For
example, a type pattern never has a type function nor a forall. It won't
have meaningful `CastTy`s or `CoercionTy`s either. With this change, the
pure unifier could perhaps be simplified.
In any case, more thought is necessary.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14038#comment:6>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list