[GHC] #10047: inconsistency in name binding between splice and quasiquotation

GHC ghc-devs at haskell.org
Tue Feb 10 14:50:43 UTC 2015


#10047: inconsistency in name binding between splice and quasiquotation
-------------------------------------+-------------------------------------
        Reporter:  rwbarton          |                   Owner:
            Type:  bug               |                  Status:  new
        Priority:  normal            |               Milestone:
       Component:  Template Haskell  |                 Version:  7.8.4
      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 Simon Peyton Jones <simonpj@…>):

 In [changeset:"f46360ed7139ff25741b381647b0a0b6d1000d84/ghc"]:
 {{{
 #!CommitTicketReference repository="ghc"
 revision="f46360ed7139ff25741b381647b0a0b6d1000d84"
 Refactor the handling of quasi-quotes

 As Trac #10047 points out, a quasi-quotation [n|...blah...|] is supposed
 to behave exactly like $(n "...blah...").  But it doesn't!  This was
 outright
 wrong: quasiquotes were being run even inside brackets.

 Now that TH supports both typed and untyped splices, a quasi-quote is
 properly
 regarded as a particular syntax for an untyped splice. But apart from that
 they should be treated the same.  So this patch refactors the handling of
 quasiquotes to do just that.

 The changes touch quite a lot of files, but mostly in a routine way.
 The biggest changes by far are in RnSplice, and more minor changes in
 TcSplice.  These are the places where there was real work to be done.
 Everything else is routine knock-on changes.

 * No more QuasiQuote forms in declarations, expressions, types, etc.
   So we get rid of these data constructors
     * HsBinds.QuasiQuoteD
     * HsExpr.HsSpliceE
     * HsPat.QuasiQuotePat
     * HsType.HsQuasiQuoteTy

 * We get rid of the HsQuasiQuote type altogether

 * Instead, we augment the HsExpr.HsSplice type to have three
   consructors, for the three types of splice:
     * HsTypedSplice
     * HsUntypedSplice
     * HsQuasiQuote
   There are some related changes in the data types in HsExpr near
 HsSplice.
   Specifically: PendingRnSplice, PendingTcSplice, UntypedSpliceFlavour.

 * In Hooks, we combine rnQuasiQuoteHook and rnRnSpliceHook into one.
   A smaller, clearer interface.

 * We have to update the Haddock submodule, to accommodate the hsSyn
 changes
 }}}

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


More information about the ghc-tickets mailing list