• Iavor S. Diatchki's avatar
    Custom `Typeable` solver, that keeps track of kinds. · b359c886
    Iavor S. Diatchki authored
    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
    b359c886
DynFlags.hs 172 KB