
People, who knows, please, how to fix re-compilation in ghc-6.4 ? Porting my program dm from 6.2.2 to 6.4, I see that the 6.4 system re-compiles many modules when re-processing the Makefile to build dm. For example, let Foo.hs from dm contain an error "value v not in scope". Running make dm for the first time compiles all the modules before Foo in 50 seconds. Then, I fix an error in Foo.hs and repeat "make dm". The options are set so that ghc-6.2.2 gets to Foo.hs in less than 1 second when doing this repeated `make'. It does consider each module before Foo and each time decides that there is no need in recompilation. It keeps on going this way: -------- Considering whether compilation is required for Prelude0: Skipping Prelude0 ( ./Prelude0.hs, /foo/source/export/Prelude0.o ) -------- and so on, by the scheme "Considering ..XX -- {Checking usages .. --} Skipping XX". The compiler applies this way: -------------------- /foo/ghc/6.2.2/inst/bin/ghc -fglasgow-exts -fallow-undecidable-instances -fallow-overlapping-instances -fno-warn-overlapping-patterns -fwarn-unused-binds -fwarn-unused-matches -fwarn-unused-imports -idemotest -odir /home/mechvel/dm/1.02/dm/source/export -hidir /home/mechvel/dm/1.02/dm/source/export -ddump-hi-diffs --make DExport -package-name dm -------------------- Now, when ghc-6.4 does such a repeated `make', it re-compiles all the `previous' modules under the above options: --------- Chasing modules from: DExport Source file changed or recompilation check turned off Compiling Prelude0 ( ./Prelude0.hs, /.../source/export/Prelude0.o ) Interface file unchanged ... --------- (And when setting to Foo a _syntax_ error, 6.4 finds this error without compiling `previous' modules). Something has changed in 6.4, maybe, the default for the recompilation check, I do not know. 6.2.2 did what was intended in Makefile. Who knows, please, how to fix this recompilation point in 6.4 ? Thank you in advance for explanation. ----------------- Serge Mechveliani mechvel@botik.ru