[GHC] #9628: Add Annotations to the AST to simplify source to source conversions

GHC ghc-devs at haskell.org
Mon Oct 13 08:43:30 UTC 2014


#9628: Add Annotations to the AST to simplify source to source conversions
-------------------------------------+-------------------------------------
              Reporter:  alanz       |            Owner:  alanz
                  Type:  feature     |           Status:  new
  request                            |        Milestone:
              Priority:  normal      |          Version:  7.9
             Component:  Compiler    |         Keywords:
            Resolution:              |     Architecture:  Unknown/Multiple
      Operating System:              |       Difficulty:  Unknown
  Unknown/Multiple                   |       Blocked By:
       Type of failure:              |  Related Tickets:
  None/Unknown                       |
             Test Case:              |
              Blocking:              |
Differential Revisions:  D297        |
-------------------------------------+-------------------------------------

Comment (by alanz):

 There is one other issue required for source to source conversions, namely
 original literal values.

 When literals are parsed, they are converted into an internal
 representation, and the original string is discarded.

 I am proposing to amend `HsLit` to be

 {{{
 #!haskell
 data HsLit
   = HsChar          String Char               -- Character
   | HsCharPrim      String Char               -- Unboxed character
   | HsString        String FastString         -- String
   | HsStringPrim    String ByteString         -- Packed bytes
   | HsInt           String Integer            -- Genuinely an Int; arises
 from
                                               --     TcGenDeriv, and from
 TRANSLATION
   | HsIntPrim       String Integer            -- literal Int#
   | HsWordPrim      String Integer            -- literal Word#
   | HsInt64Prim     String Integer            -- literal Int64#
   | HsWord64Prim    String Integer            -- literal Word64#
   | HsInteger       String Integer  Type      -- Genuinely an integer;
 arises only from
                                               --   TRANSLATION (overloaded
 literals are
                                               --   done with HsOverLit)
   | HsRat           String FractionalLit Type -- Genuinely a rational;
 arises only from
                                               --   TRANSLATION (overloaded
 literals are
                                               --   done with HsOverLit)
   | HsFloatPrim     String FractionalLit      -- Unboxed Float
   | HsDoublePrim    String FractionalLit      -- Unboxed Double
   deriving (Data, Typeable)

 }}}

 where the first parameter in each case is the original source code
 represetation of the literal.

 Should this be a `String` or a `FastString`?

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


More information about the ghc-tickets mailing list