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

Ryan Scott ryan.gl.scott at gmail.com
Sat Sep 26 16:52:10 UTC 2015


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/d230b95f/attachment.html>


More information about the Libraries mailing list