Template Haskell stability

Iavor Diatchki iavor.diatchki at gmail.com
Sun Mar 10 16:56:20 UTC 2024


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
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20240310/6c6ecc81/attachment.html>


More information about the ghc-devs mailing list