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

Michael Sloan mgsloan at gmail.com
Wed Sep 23 04:16:02 UTC 2015


+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/20150923/c68a6672/attachment.html>


More information about the Libraries mailing list