Proposal: liftData for Template Haskell

Ganesh Sittampalam ganesh at earth.li
Wed May 13 06:11:34 UTC 2015


-1: I think that kind of instance (Foo a => Bar a) is generally quite
problematic so there should be a pretty strong case to support it.

There can only be one of them - if some other class shows up that can
also provide an equally good implementation of 'lift', there's a conflict.

Also won't people get misleading error messages, implying they should
implement Data when Lift would do?

"instance Lift X where lift = liftData" doesn't seem too onerous to
write by hand to me, though I guess it may be hard to discover that's an
option.

On 05/05/2015 04:36, Edward Z. Yang wrote:
> Hello all,
> 
> It looks like people are opposed to doing with the lift type-class.
> So here is a counterproposal: mark the Lift type class as overlappable,
> and define an instance:
> 
>     instance Data a => Lift a where
>         ...
> 
> This is fairly desirable, since GHC will sometimes generate a call to
> 'lift', in which case liftData can't be manually filled in.  People
> can still define efficient versions of lift.
> 
> Edward
> 
> Excerpts from Edward Z. Yang's message of 2015-04-17 04:21:16 -0700:
>> I propose adding the following function to Language.Haskell.TH:
>>
>>     -- | 'liftData' is a variant of 'lift' in the 'Lift' type class which
>>     -- works for any type with a 'Data' instance.
>>     liftData :: Data a => a -> Q Exp
>>     liftData = dataToExpQ (const Nothing)
>>
>> I don't really know which submodule this should come from;
>> since it uses 'dataToExpQ', you might put it in Language.Haskell.TH.Quote
>> but arguably 'dataToExpQ' doesn't belong in this module either,
>> and it only lives there because it is a useful function for defining
>> quasiquoters and it was described in the quasiquoting paper.
>>
>> I might propose getting rid of the 'Lift' class entirely, but you
>> might prefer that class since it doesn't go through SYB (and have
>> the attendant slowdown).
>>
>> This mode of use of 'dataToExpQ' deserves more attention.
>>
>> Discussion period: 1 month
>>
>> Cheers,
>> Edward
> _______________________________________________
> Libraries mailing list
> Libraries at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries
> 



More information about the Libraries mailing list