[GHC] #14396: Hs-boot woes during family instance consistency checks

GHC ghc-devs at haskell.org
Fri Dec 1 13:38:25 UTC 2017


#14396: Hs-boot woes during family instance consistency checks
-------------------------------------+-------------------------------------
        Reporter:  simonpj           |                Owner:  (none)
            Type:  bug               |               Status:  patch
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  8.2.1
      Resolution:                    |             Keywords:  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:D4154
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by Edward Z. Yang <ezyang@…>):

 In [changeset:"6998772043a7f0b0360116eb5ffcbaa5630b21fb/ghc"
 69987720/ghc]:
 {{{
 #!CommitTicketReference repository="ghc"
 revision="6998772043a7f0b0360116eb5ffcbaa5630b21fb"
 Make use of boot TyThings during typechecking.

 Summary:
 Suppose that you are typechecking A.hs, which transitively imports,
 via B.hs, A.hs-boot.  When we poke on B.hs and discover that it
 has a reference to a type from A, what TyThing should we wire
 it up with?  Clearly, if we have already typechecked A, we
 should use the most up-to-date TyThing: the one we freshly
 generated when we typechecked A.  But what if we haven't typechecked
 it yet?

 For the longest time, GHC adopted the policy that this was
 *an error condition*; that you MUST NEVER poke on B.hs's reference
 to a thing defined in A.hs until A.hs has gotten around to checking
 this.  However, actually ensuring this is the case has proven
 to be a bug farm.  The problem was especially poignant with
 type family consistency checks, which eagerly happen before
 any typechecking takes place.

 This patch takes a different strategy: if we ever try to access
 an entity from A which doesn't exist, we just fall back on the
 definition of A from the hs-boot file.  This means that you may
 end up with a mix of A.hs and A.hs-boot TyThings during the
 course of typechecking.

 Signed-off-by: Edward Z. Yang <ezyang at fb.com>

 Test Plan: validate

 Reviewers: simonpj, bgamari, austin, goldfire

 Subscribers: thomie, rwbarton

 GHC Trac Issues: #14396

 Differential Revision: https://phabricator.haskell.org/D4154
 }}}

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


More information about the ghc-tickets mailing list