<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Fri, Nov 28, 2014 at 3:41 PM, Lars Hupel <span dir="ltr"><<a href="mailto:lars@hupel.info" target="_blank">lars@hupel.info</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><span></span>Let's say the hypothetical feature is selected via the GHC flag<br>
"--topo-sort". It would add a step before regular compilation and<br>
wouldn't affect any other flag:<br>
<br>
  ghc -c --topo-sort fileA.hs fileB.hs ...<br>
<br>
This would first read in the specified source files and look at their<br>
module headers and import statements. It would build a graph of module<br>
dependencies _between_ the specified source files (ignoring circular<br>
dependencies), perform a topological sort on that graph, and proceed<br>
with compiling the source files in that order.<br></blockquote><div><br></div><div>GHC 8 will have support for <span>Frontend plugins. </span>Frontend plugins enable you to write plugins to replace<br>
GHC major modes. <br><br>  E.g. instead of saying

<div class=""><pre class="">    ghc --make A B C</pre></div>

<p>you can now say:</p>

<div class=""><div class=""><pre class="">    ghc --frontend TopoSort A B C</pre></div><span style="font-family:arial,helvetica,sans-serif">You still have to implement TopoSort.hs yourself, using the GHC API to compile A B C in topological order, but some of the plumbing is taken care of by the Frontend plugin infrastructure already.<br><br>Take a look at this commit, especially the user's guide section and the test case: <a href="https://github.com/ghc/ghc/commit/a3c2a26b3af034f09c960b2dad38f73be7e3a655">https://github.com/ghc/ghc/commit/a3c2a26b3af034f09c960b2dad38f73be7e3a655</a>.</span></div></div></div></div></div>