[GHC] #10823: Expose keepAlive to Template Haskell

GHC ghc-devs at haskell.org
Tue Sep 1 18:21:41 UTC 2015


#10823: Expose keepAlive to Template Haskell
-------------------------------------+-------------------------------------
              Reporter:  spinda      |             Owner:
                  Type:  feature     |            Status:  new
  request                            |
              Priority:  normal      |         Milestone:
             Component:  Compiler    |           Version:  7.10.2
              Keywords:              |  Operating System:  Unknown/Multiple
          Architecture:              |   Type of failure:  None/Unknown
  Unknown/Multiple                   |
             Test Case:              |        Blocked By:
              Blocking:              |   Related Tickets:
Differential Revisions:              |
-------------------------------------+-------------------------------------
 {{{keepAlive}}} is a
 [https://github.com/ghc/ghc/blob/efa7b3a474bc373201ab145c129262a73c86f959/compiler/typecheck/TcRnMonad.hs#L1276
 function in TcRnMonad] that adds a {{{Name}}} to the set of {{{Name}}}s to
 keep when pruning out dead code.

 A concrete use case for exposing this to Template Haskell is in
 LiquidHaskell, which will soon function as a Core plugin. In
 LiquidHaskell, a subset of Haskell functions can be "lifted" to the logic
 level and used in types. For example:

 {{{
 module Test (ok) where

 [lq| inline gt |]
 gt x y = x > y

 [lq| ok :: x:Int -> { v:Int | gt x v } |]
 ok x = x + 1
 }}}

 LiquidHaskell runs a transformation from the {{{CoreBind}}} for {{{gt}}}
 to its internal representation of decidable logic. Since Core plugins are
 run after "dead" code is removed at the end of desugaring, and since
 {{{gt}}} is not exported, the {{{CoreBind}}} for {{{gt}}} would not reach
 the {{{CoreBinds}}} LH receives as a Core plugin.

 The solution for this is to be able to mark names with {{{keepAlive}}}
 from Template Haskell.

 Proposed specification:

 {{{
 keepAlive :: Name -> Q ()
 }}}

 where {{{Name}}} is a Template Haskell {{{Name}}}.

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


More information about the ghc-tickets mailing list