Hi Ryan, hi Richard,

> My (limited) understanding is that template-haskell is not reinstallable for 
> the same reasons that base and ghc-prim aren't reinstallable: the GHC 
> codebase directly wires in several definitions several functions, types, and 
> data constructors from template-haskell. See THNames [1]. If one were to, 
> say, use GHC 8.6 but install a different version of template-haskell than the 
> one that came bundled with 8.6, then it's almost certain that lots of code in 
> THNames would no longer work, since they could be referencing identifiers 
> that no longer exist (if the new version of template-haskell doesn't have 
> them).

Right, I'm mostly concerned about re-installing the *same* version again.  For 
the motivation:
template-haskell depends on pretty, deepseq and array.  Let's assume there is 
some off-by-one issue
in array that only affects my application right now.  Now I'm going to patch my 
array package, but
if my application depends on template-haskell, I end up with two different 
array packages in my dependency
tree that are not identical.  What I'd ideally like to do here is to re-install 
deepseq, pretty and
template-haskell based on my fixed array package.  Now I don't have two 
different array packeds in my
dependencies anymore; it would however require me to be able to rebuild (the 
same version) of template-haskell.


> I have to admit I don't have a strong grasp on what "reinstallable" implies. 
> Does a package get the same hash after reinstalling? What could make a 
> package not reinstallable? Why aren't packages reinstallable today? Why isn't 
> ghc-prim reinstallable?

We can't re-install packages that depend on build-time values. The RTS and 
ghc-prim right now
include files that are generated during the build process and they have no 
capability on their
own to create those files, as such re-installing them is not possible right now.

> My concern stems from the fact that ghc is interlinked with TH in at least 
> two ways:
> - GHC imports definitions from template-haskell. But this is the same as the 
> way GHC is involved with, say, `base`.
> - GHC also wires in some template-haskell definitions. This is the aspect I 
> am worried about. Is `base` reinstallable? If so, then perhaps 
> template-haskell could be, too.


Now especially with TH I might see an issue when *running/using* TH, as at that 
point the compiler
and the produces code have to interact.  That is we are compiling splices 
against a different
template-haskell package than the compiler is built against.  This is where I 
see *upgrading* (that
is building a newer version of Template Haskell) could be an issue, but I feel 
I don't fully grasp
why rebuilding the same version should pose an issue.

If we go one step further and use iserv (-fexternal-interpreter) outright, then 
I think we could just
rebuild iserv against the re-installed template-haskell, and would not even run 
into the above
mentioned issue. Might this potentially even be allow us to upgrade 
template-haskell?

Cheers,
 Moritz

Attachment: signature.asc
Description: Message signed with OpenPGP

_______________________________________________
ghc-devs mailing list
ghc-devs@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs

Reply via email to