<div dir="ltr"><div dir="ltr"><div dir="ltr">Hello,<div><br></div><div>I'd be surprised if there is a lot of code affected by that.   Either way,  I guess this wouldn't be an issue, if we just changed the proposal to make the default instance for `typedLift` looks like the old default for `lift` (i.e., use the `Data` constraint).</div><div><br></div><div>The proposed design does have two benefits though:</div><div>   * The new design requires fewer GHC extensions (no need for `DefaultSignatures`)</div><div>   * It encourages programmers to use `DeriveLift`, which is shorter, safer, and more direct.</div><div><br></div><div>-Iavor</div><div><br></div><div> </div></div></div></div><br><div class="gmail_quote"><div dir="ltr">On Mon, Nov 5, 2018 at 10:50 AM Richard Eisenberg <<a href="mailto:rae@cs.brynmawr.edu">rae@cs.brynmawr.edu</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Will this break existing code? The proposal suggests that liftTyped will have a suitable default implementation.<br>
<br>
Actually, this will break code, but not in the way one might think (with an undefined liftTyped). Instead, the proposal removes the default implementation of lift to use liftTyped. This means that any code relying on the default implementation of lift will now have an instance with mutually recursive, non-terminating methods. And this will all be silent. And, it's something that might be discovered only in clients of a library, rather than in the library itself. So I think that's pretty problematic. Even with our recommendation to derive Lift instances, this change in behavior is so terrible that it makes me lean against the proposal. Is there a design / migration path that avoids this problem?<br>
<br>
(Yes, yes, I know that I could voiced this opinion earlier, but it didn't occur to me until just now.)<br>
<br>
Richard<br>
<br>
> On Nov 5, 2018, at 1:37 PM, Ben Gamari <<a href="mailto:ben@well-typed.com" target="_blank">ben@well-typed.com</a>> wrote:<br>
> <br>
> Hi everyone,<br>
> <br>
> I have been asked to Shepard #175, which proposes to add a `liftTyped`<br>
> method to the `Lift` typeclass used to lift Haskell values into Template<br>
> Haskell splices. Currently the `Lift` typeclass provides no guarantee of<br>
> type-safety, even when used in a Typed Template Haskell context.<br>
> <br>
> The proposal resolves this limitation by adding a typed lifting<br>
> operation to the `Lift` class:<br>
> <br>
>    class Lift t where<br>
>      lift :: t -> Q Exp<br>
>      liftTyped :: t -> Q (TExp t)<br>
> <br>
> While this addition will break manually-written `Lift` instances, we<br>
> recommended that users derive such instances for quite a while now, so<br>
> it is not expected that the breakage will be wide-spread. In light of<br>
> this, I recommend that we accept this proposal.<br>
> <br>
> Given that we will likely want to get this in to 8.8, I suggest that we<br>
> limit the discussion to a week unless there is dissent.<br>
> <br>
> Cheers,<br>
> <br>
> - Ben<br>
> _______________________________________________<br>
> ghc-steering-committee mailing list<br>
> <a href="mailto:ghc-steering-committee@haskell.org" target="_blank">ghc-steering-committee@haskell.org</a><br>
> <a href="https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee" rel="noreferrer" target="_blank">https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee</a><br>
<br>
_______________________________________________<br>
ghc-steering-committee mailing list<br>
<a href="mailto:ghc-steering-committee@haskell.org" target="_blank">ghc-steering-committee@haskell.org</a><br>
<a href="https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee" rel="noreferrer" target="_blank">https://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-steering-committee</a><br>
</blockquote></div>