[GHC] #11062: Type families + hs-boot files = panic

GHC ghc-devs at haskell.org
Wed May 18 16:47:40 UTC 2016


#11062: Type families + hs-boot files = panic
-------------------------------------+-------------------------------------
        Reporter:  goldfire          |                Owner:
            Type:  bug               |               Status:  patch
        Priority:  high              |            Milestone:  8.2.1
       Component:  Compiler          |              Version:  7.11
      Resolution:                    |             Keywords:  TypeFamilies
                                     |  hs-boot
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):  Phab:D2215
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by simonpj):

 I'm going to respond  here to the comments on Phab:D2215 because I think
 Trac comments are more likely to survive long term than Phab discussion.

 The question is: ''where should we check for consistency of imported type-
 family axioms?''

 Currently it's done right after processing the import declarations of a
 module; but that's too early when we are concerned about consistency of
 axioms for a type family declared in this module.

 The patch does it late, after type checking all the local declarations.
 That's bad too, because all that type checking could be done with bogus
 overlapping family instances.

 I can think of two solutions.

 1.  Check for consistency of axioms for `F` ''right after `F` is
 defined''. That is, somewhere in `TcTyClsDecls.tcTyClGroup`.  Notes:
     * We'd still need to check consistency for ''imported'' families
 before we start typechecking anything.
     * With this more incremental behaviour it might be harder to optimise
 the number of pairs compared (see `checkFamInstConsistency` module-pair
 stuff).  But that doesn't matter since it is vanishingly rare for a type
 family defined in this module to have any imported instances whatsoever.


 2.  Make family-instance lookup complain if it finds two matching
 instances.
     * That would means we'd never make use of inconsistent instances,
 which would prevent strange error messages
     * We'd still need to do an aggressive `checkFamInstConsistency` check
 after type checking, to ensure consistency of instances that we didn't
 actually need when compiling this module (see the comments above
 `FamInst.checkFamInstConsistency`.

 I'm not sure which is best.  I think (2) looks a bit easier, and is quite
 close to the proposed patch; just needs an overlap check on lookup.

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


More information about the ghc-tickets mailing list