
| Let's say the hypothetical feature is selected via the GHC flag "-- | topo-sort". It would add a step before regular compilation and | wouldn't affect any other flag: | | ghc -c --topo-sort fileA.hs fileB.hs ... | | This would first read in the specified source files and look at their | module headers and import statements. It would build a graph of module | dependencies _between_ the specified source files (ignoring circular | dependencies), perform a topological sort on that graph, and proceed | with compiling the source files in that order. Interesting (and quite different from what I anticipated, so it's a good thing you wrote it down!). How does that differ from ghc --make? The only difference I can see is that - Modules that --make might find, but not listed on the command line, would not be compiled by --topo-sort Simon | -----Original Message----- | From: Lars Hupel [mailto:lars@hupel.info] | Sent: 28 November 2014 14:42 | To: Simon Peyton Jones | Cc: glasgow-haskell-users@haskell.org; Andrey Mokhov | Subject: Re: Discovery of source dependencies without --make | | > Rather than explain by deltas from something else, it might be | easier | > just to write down precisely what you seek. | | Let's say the hypothetical feature is selected via the GHC flag "-- | topo-sort". It would add a step before regular compilation and | wouldn't affect any other flag: | | ghc -c --topo-sort fileA.hs fileB.hs ... | | This would first read in the specified source files and look at their | module headers and import statements. It would build a graph of module | dependencies _between_ the specified source files (ignoring circular | dependencies), perform a topological sort on that graph, and proceed | with compiling the source files in that order. | | As a consequence, if there is an order in which these modules can be | successfully compiled, "--topo-sort" would choose such an order. In | that sense, the above invocation would be equivalent to | | ghc -c fileB.hs fileA.hs ... | | (using some permutation of the original order specified) | | Another consequence is that any invocation of GHC in the form of | | ghc -c flags... sources.hs... | | with arbitrary flags would still work as usual when adding "--topo- | sort". | | Quoting from the user manual: | | > In your program, you import a module Foo by saying import Foo. In | > --make mode or GHCi, GHC will look for a source file for Foo and | > arrange to compile it first. Without --make, GHC will look for the | > interface file for Foo, which should have been created by an earlier | > compilation of Foo. | | The hypothetical "--topo-sort" flag would behave in the latter way, | i.e. | it would not require a source file for an unknown dependency. Hence, | "--topo-sort" and "--make" would be conflicting options. | | I hope that clears up things a bit. | | Cheers | Lars