
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-... --- 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@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs