
You might also notice something else a bit funny, which is that X.hs gets compiled, even though it's not directly in the import chain of Y. I
#10333: hs-boot modification doesn't induce recompilation -------------------------------------+------------------------------------- Reporter: ezyang | Owner: Type: bug | Status: new Priority: normal | Milestone: Component: Compiler | Version: 7.11 Resolution: | Keywords: Operating System: Unknown/Multiple | Architecture: Type of failure: GHC accepts | Unknown/Multiple invalid program | Test Case: Blocked By: | Blocking: Related Tickets: | Differential Revisions: -------------------------------------+------------------------------------- Comment (by ezyang): I've diagnosed why this is occurring. `GhcMake` does some fancy business to determine if an object is stable. Essentially, object stability is a timestamped based check which tries to let `GhcMake` avoid recompiling source files which didn't change at all. However, stability is computed on a **per module name** basis, preferentially checking to see if `hs` files have been updated. This means that if you modify an `hs-boot` file but not the `hs` file, GHC will still consider it "stable" because the stability check was done on `hs`; and will proceed to tell the one-shot compiler that the file was not modified. I'm not sure what the correct solution to this problem is. think this might be intentional but I'm not sure. This is because there is explicit logic in `GhcMake` to make this be the case. -- Ticket URL: http://ghc.haskell.org/trac/ghc/ticket/10333#comment:2 GHC http://www.haskell.org/ghc/ The Glasgow Haskell Compiler