[GHC] #9858: Typeable instances should be kind-aware

Simon Peyton Jones simonpj at microsoft.com
Wed May 13 08:07:34 UTC 2015


Heads-up: this one changes interface file formats, so you need a clean build.

Simon

|  -----Original Message-----
|  From: GHC [mailto:ghc-devs at haskell.org]
|  Sent: 13 May 2015 09:02
|  Cc: ghc-tickets at haskell.org
|  Subject: Re: [GHC] #9858: Typeable instances should be kind-aware
|  
|  #9858: Typeable instances should be kind-aware
|  -------------------------------------+--------------------------------
|  --
|  -------------------------------------+---
|          Reporter:  dreixel           |                   Owner:
|              Type:  bug               |                  Status:
|  closed
|          Priority:  highest           |               Milestone:
|  7.10.2
|         Component:  Compiler          |                 Version:  7.9
|        Resolution:  fixed             |                Keywords:
|  Operating System:  Unknown/Multiple  |            Architecture:
|   Type of failure:  None/Unknown      |  Unknown/Multiple
|        Blocked By:                    |               Test Case:
|   Related Tickets:                    |
|  typecheck/should_fail/T9858a,b,c;
|                                       |  should_run/T9858b
|                                       |                Blocking:
|                                       |  Differential Revisions:
|  Phab:D652
|  -------------------------------------+--------------------------------
|  --
|  -------------------------------------+---
|  
|  Comment (by Simon Peyton Jones <simonpj@…>):
|  
|   In [changeset:"130e93aab220bdf14d08028771f83df210da340b/ghc"]:
|   {{{
|   #!CommitTicketReference repository="ghc"
|   revision="130e93aab220bdf14d08028771f83df210da340b"
|   Refactor tuple constraints
|  
|   Make tuple constraints be handled by a perfectly ordinary  type
|  class, with the component constraints being the
|   superclasses:
|       class (c1, c2) => (c2, c2)
|  
|   This change was provoked by
|  
|     #10359  inability to re-use a given tuple
|             constraint as a whole
|  
|     #9858   confusion between term tuples
|             and constraint tuples
|  
|   but it's generally a very nice simplification. We get rid of
|    -  In Type, the TuplePred constructor of PredTree,
|       and all the code that dealt with TuplePreds
|    -  In TcEvidence, the constructors EvTupleMk, EvTupleSel
|  
|   See Note [How tuples work] in TysWiredIn.
|  
|   Of course, nothing is ever entirely simple. This one  proved quite
|  fiddly.
|  
|   - I did quite a bit of renaming, which makes this patch
|     touch a lot of modules. In partiuclar tupleCon -> tupleDataCon.
|  
|   - I made constraint tuples known-key rather than wired-in.
|     This is different to boxed/unboxed tuples, but it proved
|     awkward to have all the superclass selectors wired-in.
|     Easier just to use the standard mechanims.
|  
|   - While I was fiddling with known-key names, I split the TH Name
|     definitions out of DsMeta into a new module THNames.  That meant
|     that the known-key names can all be gathered in PrelInfo, without
|     causing module loops.
|  
|   - I found that the parser was parsing an import item like
|         T( .. )
|     as a *data constructor* T, and then using setRdrNameSpace to
|     fix it.  Stupid!  So I changed the parser to parse a *type
|     constructor* T, which means less use of setRdrNameSpace.
|  
|     I also improved setRdrNameSpace to behave better on Exact Names.
|     Largely on priciple; I don't think it matters a lot.
|  
|   - When compiling a data type declaration for a wired-in thing like
|     tuples (,), or lists, we don't really need to look at the
|     declaration.  We have the wired-in thing!  And not doing so avoids
|     having to line up the uniques for data constructor workers etc.
|     See Note [Declarations for wired-in things]
|  
|   - I found that FunDeps.oclose wasn't taking superclasses into
|     account; easily fixed.
|  
|   - Some error message refactoring for invalid constraints in
|  TcValidity  }}}
|  
|  --
|  Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/9858#comment:114>
|  GHC <http://www.haskell.org/ghc/>
|  The Glasgow Haskell Compiler


More information about the ghc-devs mailing list