[GHC] #10697: Change template-haskell API to allow NOUNPACK, lazy annotations

GHC ghc-devs at haskell.org
Thu Dec 10 16:32:11 UTC 2015


#10697: Change template-haskell API to allow NOUNPACK, lazy annotations
-------------------------------------+-------------------------------------
        Reporter:  RyanGlScott       |                Owner:
            Type:  feature request   |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Template Haskell  |              Version:  7.10.1
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:  #5290, #8347      |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by RyanGlScott):

 The problem is that the info in `HsSrcBangs` may not reflect what is
 actually going on in some cases.

 Let's suppose a user wanted to write a TH function that checks if every
 argument of a data constructor is unpacked. If the user wrote this:

 {{{#!hs
 data T = T !Int Int
 }}}

 then how would the user know for sure if the fields are actually unpacked?
 If `-funbox-strict-fields` is on, then the first argument is unpacked, but
 if not, it's strict but not unpacked. If `-funbox-strict-fields` ''and''
 `-XStrict` is on, then ''both'' would be unpacked. But if the user relied
 on `HsSrcBangs`, they would be mislead into believing that the first
 argument always is strict (but not unpacked) and the second argument is
 always lazy.

 This situation kind of reminds me of TH's `TyVarBndr` in that `PlainTV`
 represents a type variable without an explicit kind variable, which should
 only be used during splicing. Afterwards, a kind is inferred, so reifying
 the datatype back gives you a `KindedTV` instead. Perhaps we should do
 something similar with strictness annotations?

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


More information about the ghc-tickets mailing list