Proposal: Derive Lift for all data types in the template-haskell library

Richard Eisenberg eir at cis.upenn.edu
Sat Sep 26 22:12:10 UTC 2015


Excellent point. We could, if we wanted, use some custom code (or -ddump-deriv? or th-lift and -ddump-splices?) to generate all the Lift instances and then add them by hand. I wouldn't want to maintain these instances indefinitely, but now that it's not indefinite, I'm OK.

But I'm also not dying for the instances to begin with. So we could just table the discussion for a few years until we're ready to use 8.0 for bootstrapping.

Richard

On Sep 26, 2015, at 12:52 PM, Ryan Scott <ryan.gl.scott at gmail.com> wrote:

> Hm, it looks like I proposed this much earlier than I probably should have, since I forgot that the GHC boot libraries have to be buildable by the last two major releases of GHC anyway [1], and since template-haskell is a stage-0 dependency, adding -XDeriveLift to template-haskell is a no-go at the moment.
> 
> But I can at least look forward to having this in GHC 8.4 in a couple of years :)
> 
> Ryan S.
> 
> -----
> [1] https://ghc.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Compilerversionsandlanguageextensions
> [2] http://git.haskell.org/ghc.git/blob/HEAD:/ghc.mk#l419
> 
> On Wed, Sep 23, 2015 at 12:16 AM, Michael Sloan <mgsloan at gmail.com> wrote:
> +1,ideally, th-orphans would be essentially empty for newer GHCs (and so just be a compatibility shim for also getting the instances with older TH)
> 
> Actually, oddly enough, th-orphans ought to not be broken by this.  Other than a number of Lift instances for numeric types, here's how it defines all its Lift instances:
> 
> $(reifyManyWithoutInstances ''Lift [''Info, ''Loc] (const True) >>= deriveLiftMany)
> 
> This recursively derives Lift for every datatype transitively, but only if they don't already have a Lift instance.  I'd been hoping to use this for everything in th-orphans, but unfortunately older versions of TH don't support standalone deriving.
> 
> Michael
> 
> On Tue, Sep 22, 2015 at 5:59 PM Richard Eisenberg <eir at cis.upenn.edu> wrote:
> +1 from me. Now that it's so easy, I think Lift should be instanced for all concrete types exported from the boot libraries. Do make sure to communicate with the authors of th-lift and th-orphans at some point, though.
> 
> Richard
> 
> On Sep 22, 2015, at 10:12 AM, Ryan Scott <ryan.gl.scott at gmail.com> wrote:
> 
>> The DeriveLift extension has landed in GHC HEAD, so now it's become apparent that the bikeshed needs a new coat of paint. The only Lift instances at the moment are base types [1], but with DeriveLift, it would be possible to implement Lift for many for data types with ease.
>> 
>> I'll make (what I hope is) an uncontroversial first suggestion: we should derive Lift for every data type in the template-haskell library itself. These instances have proved to be useful for library authors who need to convert to and from the TH AST (th-desugar, for example, relies on this functionality via orphan instances [2]).
>> 
>> Adding this would break some code out in the wild (the th-lift [3] and th-orphans [4] packages come to mind; there may be others), so I'll request feedback before marching forth with this proposal.
>> 
>> Ryan S.
>> 
>> -----
>> [1] http://hackage.haskell.org/package/template-haskell-2.10.0.0/docs/Language-Haskell-TH-Syntax.html#t:Lift
>> [2] http://hackage.haskell.org/package/th-desugar-1.5.4.1/docs/src/Language-Haskell-TH-Desugar-Lift.html
>> [3] http://hackage.haskell.org/package/th-lift
>> [4] http://hackage.haskell.org/package/th-orphans
>> _______________________________________________
>> Libraries mailing list
>> Libraries at haskell.org
>> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
> 
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
> 

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/libraries/attachments/20150926/1cc80948/attachment.html>


More information about the Libraries mailing list