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

GHC ghc-devs at haskell.org
Sat Mar 7 16:38:45 UTC 2015


#9858: Typeable instances should be kind-aware
-------------------------------------+-------------------------------------
        Reporter:  dreixel           |                   Owner:  dreixel
            Type:  bug               |                  Status:  new
        Priority:  highest           |               Milestone:  7.10.1
       Component:  Compiler          |                 Version:  7.9
      Resolution:                    |                Keywords:
Operating System:  Unknown/Multiple  |            Architecture:
 Type of failure:  None/Unknown      |  Unknown/Multiple
      Blocked By:                    |               Test Case:
 Related Tickets:                    |                Blocking:
                                     |  Differential Revisions:
-------------------------------------+-------------------------------------

Comment (by Austin Seipp <austin@…>):

 In [changeset:"b359c886cd7578ed083bcedcea05d315ecaeeb54/ghc"]:
 {{{
 #!CommitTicketReference repository="ghc"
 revision="b359c886cd7578ed083bcedcea05d315ecaeeb54"
 Custom `Typeable` solver, that keeps track of kinds.

 Summary:
 This implements the new `Typeable` solver: when GHC sees `Typeable`
 constraints
 it solves them on the spot.

 The current implementation creates `TyCon` representations on the spot.

 Pro: No overhead at all in code that does not use `Typeable`
 Cons: Code that uses `Typeable` may create multipe `TyCon` represntations.

 We have discussed an implementation where representations of `TyCons` are
 computed once, in the module, where a datatype is declared.  This would
 lead to more code being generated:  for a promotable datatype we need to
 generate `2 + number_of_data_cons` type-constructro representations,
 and we have to do that for all programs, even ones that do not intend to
 use typeable.

 I added code to emit warning whenevar `deriving Typeable` is
 encountered---
 the idea being that this is not needed anymore, and shold be fixed.

 Also, we allow `instance Typeable T` in .hs-boot files, but they result
 in a warning, and are ignored.  This last one was to avoid breaking
 exisitng
 code, and should become an error, eventually.

 Test Plan:
 1. GHC can compile itself.
 2. I compiled a number of large libraries, including `lens`.
     - I had to make some small changes:
       `unordered-containers` uses internals of `TypeReps`, so I had to do
 a 1 line fix
     - `lens` needed one instance changed, due to a poly-kinded `Typeble`
 instance

 3. I also run some code that uses `syb` to traverse a largish
 datastrucutre.
 I didn't notice any signifiant performance difference between the 7.8.3
 version,
 and this implementation.

 Reviewers: simonpj, simonmar, austin, hvr

 Reviewed By: austin, hvr

 Subscribers: thomie

 Differential Revision: https://phabricator.haskell.org/D652

 GHC Trac Issues: #9858
 }}}

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


More information about the ghc-tickets mailing list