
#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): Right, I probably should have you'd know all about `HsImplBang`. Better safe than sorry. :) If no one has any objections, I'd like to take back my earlier proposal and instead propose this be the redesign for strictness in TH: {{{#!hs data SourceStrictness = NoSourceStrictness | SourceLazy | SourceStrict data SourceUnpackedness = NoSourceUnpackedness | SourceNoUnpack | SourceUnpack data DecidedStrictness = DecidedLazy | DecidedStrict | DecidedUnpack data Bang = PendingBang SourceStrictness | DecidedBang SourceStrictness DecidedStrictness type BangType = (Bang, Type) type VarBangType = (Name, Bang, Type) type StrictType = BangType type VarStrictType = VarBangType }}} The tricky part is distinguishing between strictness at the point of splicing and strictness post-compilation. I attempt to do this with the `Bang` data type, which has two constructors for these purposes. I would also propose that attempting to splice in a datatype with a `DecidedBang` value would lead to a warning and silently revert to a `PendingBang` value (after all, what GHC decides is the right `Bang` completely depends on the environment!) -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10697#comment:12 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler