[GHC] #12919: Equality not used for substitution

GHC ghc-devs at haskell.org
Thu Jul 27 11:49:36 UTC 2017


#12919: Equality not used for substitution
-------------------------------------+-------------------------------------
        Reporter:  int-index         |                Owner:  goldfire
            Type:  bug               |               Status:  new
        Priority:  highest           |            Milestone:  8.4.1
       Component:  Compiler (Type    |              Version:  8.0.1
  checker)                           |
      Resolution:                    |             Keywords:  TypeInType
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  GHC rejects       |            Test Case:
  valid program                      |  typecheck/should_compile/T12919
      Blocked By:                    |             Blocking:
 Related Tickets:  #13643            |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by Richard Eisenberg <rae@…>):

 In [changeset:"8e15e3d370e9c253ae0dbb330e25b72cb00cdb76/ghc"
 8e15e3d3/ghc]:
 {{{
 #!CommitTicketReference repository="ghc"
 revision="8e15e3d370e9c253ae0dbb330e25b72cb00cdb76"
 Improve error messages around kind mismatches.

 Previously, when canonicalizing (or unifying, in uType) a
 heterogeneous equality, we emitted a kind equality and used the
 resulting coercion to cast one side of the heterogeneous equality.

 While sound, this led to terrible error messages. (See the bugs
 listed below.) The problem is that using the coercion built from
 the emitted kind equality is a bit like a wanted rewriting a wanted.
 The solution is to keep heterogeneous equalities as irreducible.

 See Note [Equalities with incompatible kinds] in TcCanonical.

 This commit also removes a highly suspicious switch to FM_SubstOnly
 when flattening in the kinds of a type variable. I have no idea
 why this was there, other than as a holdover from pre-TypeInType.
 I've not left a Note because there is simply no reason I can conceive
 of that the FM_SubstOnly should be there.

 One challenge with this patch is that the emitted derived equalities
 might get emitted several times: when a heterogeneous equality is
 in an implication and then gets floated out from the implication,
 the Derived is present both in and out of the implication. This
 causes a duplicate error message. (Test case:
 typecheck/should_fail/T7368) Solution: track the provenance of
 Derived constraints and refuse to float out a constraint that has
 an insoluble Derived.

 Lastly, this labels one test (dependent/should_fail/RAE_T32a)
 as expect_broken, because the problem is really #12919. The
 different handling of constraints in this patch exposes the error.

 This fixes bugs #11198, #12373, #13530, and #13610.

 test cases:
 typecheck/should_fail/{T8262,T8603,tcail122,T12373,T13530,T13610}
 }}}

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/12919#comment:14>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list