Suppose we have

ModuleA.hs (and .o)
exports funcA :: Something -> ExpQ

ModuleB.hs (and .o)
has definition
funcB = $(funcA something)

Now if we edit the implementation (but not the signature) of funcA in
ModuleA.hs and run

$ ghc -fth --make ModuleB

then ModuleA is recomplied but ModuleB is not. However on deleting
ModuleB.o and issuing the same command

$ ghc -fth --make ModuleB

then ModuleB is recompiled as expected but now we discover the mistake
we made when editing funcA which manifests itself as a semantic/type
error or some such in the code generated by funcA. The point being, that
this error was not detected the first time we recompiled because the
dependency of funcB on funcA's implementation was not considered.

The problem of course is that using imported template programs depend on
their implementation not just their signature because we use the
imported template programs to generate code in the current module which
can fail at compile time.

I don't know enough about ghc's .hi files to know if there's an easy fix
to this or not. My understanding is that .hi files contain a revision
stamp on the interface description of functions (and other stuff like
strictness etc) and modules get recompiled if any interfaces they use
have changed. Perhaps it would be possible to add an implementation
revision stamp too and modules would be recompiled if there has been an
implementation change of any imported function used withing a splice.

This might be too much pain for little gain.

Duncan

_______________________________________________
Glasgow-haskell-bugs mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/glasgow-haskell-bugs

Reply via email to