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