[GHC] #15532: Relaxing Levity-Polymorphic Binder Check for Lifted vs Unlifted pointers

GHC ghc-devs at haskell.org
Fri Aug 17 16:47:46 UTC 2018


#15532: Relaxing Levity-Polymorphic Binder Check for Lifted vs Unlifted pointers
-------------------------------------+-------------------------------------
        Reporter:  andrewthad        |                Owner:  (none)
            Type:  feature request   |               Status:  new
        Priority:  normal            |            Milestone:  8.6.1
       Component:  Compiler          |              Version:  8.4.3
      Resolution:                    |             Keywords:
                                     |  LevityPolymorphism
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:  14917             |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------

Comment (by andrewthad):

 The singleton levity trick would work, but it seems a little disappointing
 that users would need to take a (admittedly small) performance hit to get
 this extra polymorphism.

 I retract part of my claim about levity polymorphic data constructors.
 Here is what would be possible/impossible without any changes to GHC's
 codegen and runtime:

 - Defining levity-polymorphic fields in data construtors. YES
 - Constructing a value with such a data constructor where the levity is
 monomorphic. YES
 - Constructing a value with such a data constructor where the levity is
 polymorphic. NO
 - Casing on such a value in a levity-monomorphic or levity-polymorphic
 settings. YES

 This feels consistent with your earlier claim about the binder rule being
 relaxable but the function argument rule not being relaxable. Casing on a
 data constructor introduces a binder but applying a data constructor is
 applying a function. However, casing on a data constructor to get out a
 levity polymorphic field still isn't particularly useful, since there is
 basically nothing interesting you can do with the value at that point.

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


More information about the ghc-tickets mailing list