<div dir="ltr"><div>Oh, that's really confusing, especially since the internal one is what shows up first when you search for stuff!</div><div><br></div><div>Another example of similar breakage was the changes to binders a little while ago.<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sun, Mar 10, 2024 at 10:02 AM Oleg Grenrus <<a href="mailto:oleg.grenrus@iki.fi">oleg.grenrus@iki.fi</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"> > So what do I do?<br>
<br>
There are two tupE functions.<br>
<br>
In Language.Haskell.TH.Lib.Internal module the type has changed. That's <br>
the module used by GHC itself, to represent quotations. As the module <br>
documentation says<br>
<br>
 > Language.Haskell.TH.Lib.Internal exposes some additional <br>
functionality that is used internally in GHC's integration with Template <br>
Haskell. This is not a part of the public API, and as such, there are no <br>
API guarantees for this module from version to version.<br>
<br>
In the Language.Haskell.TH.Lib module which is documented as<br>
<br>
 > Language.Haskell.TH.Lib contains lots of useful helper functions for <br>
generating and manipulating Template Haskell terms<br>
<br>
the type of tupE [1] has been left unchanged, and it's still<br>
<br>
    tupE :: Quote m => [m Exp] -> m Exp<br>
<br>
[1] <br>
<a href="https://hackage.haskell.org/package/template-haskell-2.21.0.0/docs/Language-Haskell-TH-Lib.html#v:tupE" rel="noreferrer" target="_blank">https://hackage.haskell.org/package/template-haskell-2.21.0.0/docs/Language-Haskell-TH-Lib.html#v:tupE</a><br>
<br>
---<br>
<br>
Oleg<br>
<br>
<br>
On 10.3.2024 18.56, Iavor Diatchki wrote:<br>
> Hello,<br>
><br>
> I am not sure if this is the right list to post to, but I suspect <br>
> template-haskell is mostly modified by GHC folk, which is why I chose <br>
> to post here, and there is no maintainer listed, based just the <br>
> `libraries` list.<br>
><br>
> Template Haskell is a very useful tool, but I am always quite wary of <br>
> using it, because it is so unstable.   I understand the need to change <br>
> the syntax, as the language evolves, but I feel that changes are made <br>
> without any consideration for backward compatibility, which is very <br>
> unfortunate.<br>
><br>
> To give you an example, I am currently using GHC 9.6.4, and I am <br>
> working on a small TH utility.  I need to make a tuple expression, but <br>
> of a dynamic size, so I can't use the special syntax, and need to use <br>
> a function to do so.  So I am using the function, `tupE`, which has <br>
> the following type:<br>
><br>
>     tupE :: Quote m => [m Exp] -> m Exp<br>
><br>
> This is quite nice and unsurprising.   When I look oh `hackage`, <br>
> however, the type of this function has changed, now it is:<br>
><br>
>    tupE :: Quote m => [m (Maybe Exp)] -> m Expr<br>
><br>
> So what do I do?  Basically I should not use this function, because as <br>
> soon as I upgrade the compiler everything will break!  Furthermore <br>
> there is no documentation at all to explain what this function is <br>
> supposed to do (I can't fathom why it is taking `Maybe` as arguments), <br>
> or when it changed, etc.<br>
><br>
> So my plea would be---change the syntax at will, but let's try to keep <br>
> the convenience functions that build the syntax stable: instead of <br>
> changing functions, it is just as easy to add a new function.  I <br>
> understand that sometimes things need to change, but then we should <br>
> describe what changed, and in which versions.   I don't think these <br>
> are hard things to do, and I really think it will have great benefit <br>
> to everyone using TH.<br>
><br>
> Cheers,<br>
> -Iavor<br>
><br>
><br>
><br>
><br>
><br>
><br>
><br>
><br>
> _______________________________________________<br>
> ghc-devs mailing list<br>
> <a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a><br>
> <a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a><br>
_______________________________________________<br>
ghc-devs mailing list<br>
<a href="mailto:ghc-devs@haskell.org" target="_blank">ghc-devs@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs</a><br>
</blockquote></div>