Recompilation check fails for TH
|Reported by:||simonpj||Owned by:||simonmar|
|Type of failure:||Incorrect result at runtime||Test Case:||TH_recompile|
|Related Tickets:||Differential Rev(s):|
Description (last modified by )
The recompilation check only recompiles a module when the interface of a module it imports changes. But with Template Haskell, it may need to be recompiled when the implementation changes.
Concrete example below. It's quite awkward to fix.
- Perhaps a module that contains any splices should be recompiled always.
- Perhaps a module that exports any TH stuff (how would we tell?) should be flagged as changed if anything about it changes.
The following scenario reproduces this error (thanks to Bulat Ziganshin bulatz@…):
1) create Main.hs containing code
module Main where import Sub main = print $x
and Sub.hs containing code
module Sub where x = [| 1 |]
2) compile them with --make:
C:\!\Haskell\!>ghc --make -fth Main.hs Chasing modules from: Main.hs Compiling Sub ( ./Sub.hs, ./Sub.o ) Compiling Main ( Main.hs, Main.o ) Loading package base-1.0 ... linking ... done. Loading package haskell98-1.0 ... linking ... done. Loading package template-haskell-1.0 ... linking ... done. Linking ... C:\!\Haskell\!>main.exe 1
3) now change Sub.hs to the following code:
module Sub where x = [| 2 |]
4) and recompile program:
C:\!\Haskell\!>ghc --make -fth Main.hs Chasing modules from: Main.hs Compiling Sub ( ./Sub.hs, ./Sub.o ) Skipping Main ( Main.hs, Main.o ) Linking ... C:\!\Haskell\!>main.exe 1
As you see, Main.hs is not recompiled despite the fact that definition of x is changed and now program must print "2"
Change History (15)
comment:1 Changed 11 years ago by
|Operating System:||→ Unknown|
|Version:||None → 6.4.1|
comment:2 Changed 10 years ago by
|Test Case:||→ TH_recompile|
comment:10 Changed 6 years ago by
|Milestone:||_|_ → 7.2.1|
|Owner:||changed from simonpj to simonmar|
|Priority:||low → normal|