Proposal: liftData for Template Haskell
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
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.
> 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
> Libraries mailing list
> Libraries at haskell.org
More information about the Libraries