[GHC] #11785: Merge types and kinds in Template Haskell

GHC ghc-devs at haskell.org
Fri Jul 28 15:52:21 UTC 2017


#11785: Merge types and kinds in Template Haskell
-------------------------------------+-------------------------------------
        Reporter:  goldfire          |                Owner:  (none)
            Type:  task              |               Status:  patch
        Priority:  normal            |            Milestone:
       Component:  Template Haskell  |              Version:  8.1
      Resolution:                    |             Keywords:  TypeInType
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):  Phab:D3751
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by Ryan Scott <ryan.gl.scott@…>):

 In [changeset:"b3b564fbc0ceb06e6a880289935449fda7d33f31/ghc"
 b3b564fb/ghc]:
 {{{
 #!CommitTicketReference repository="ghc"
 revision="b3b564fbc0ceb06e6a880289935449fda7d33f31"
 Merge types and kinds in DsMeta

 Summary:
 Types and kinds are now the same in GHC... well, except in the code
 that involves Template Haskell, where types and kinds are given separate
 treatment. This aims to unify that treatment in the `DsMeta` module.

 The gist of this patch is replacing all uses of `repLKind` with `repLTy`.
 This is isn't quite as simple as one might imagine, since `repLTy` returns
 a
 `Core (Q Type)` (a monadic expression), whereas `repLKind` returns a
 `Core Kind` (a pure expression). This causes many awkward impedance
 mismatches.

 One option would be to change every combinator in
 `Language.Haskell.TH.Lib` to
 take `KindQ` as an argument instead of `Kind`. But this would be a
 breaking
 change of colossal proportions.

 Instead, this patch takes a somewhat different approach. This migrates the
 existing `Language.Haskell.TH.Lib` module to
 `Language.Haskell.TH.Lib.Internal`, and changes all `Kind`-related
 combinators
 in `Language.Haskell.TH.Lib.Internal` to live in `Q`. The new
 `Language.Haskell.TH.Lib` module then re-exports most of
 `Language.Haskell.TH.Lib.Internal` with the exception of the
 `Kind`-related
 combinators, for which it redefines them to be their current definitions
 (which
 don't live in `Q`). This allows us to retain backwards compatibility with
 previous `template-haskell` releases, but more importantly, it allows GHC
 to
 make as many changes to the `Internal` code as it wants for its purposes
 without fear of disrupting the public API.

 This solves half of #11785 (the other half being `TcSplice`).

 Test Plan: ./validate

 Reviewers: goldfire, austin, bgamari

 Reviewed By: goldfire

 Subscribers: rwbarton, thomie

 GHC Trac Issues: #11785

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

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


More information about the ghc-tickets mailing list