<command>ghc -M</command> will report an error if a cycle is found.
</para></listitem>
- <listitem><para> Every module that is
- <literal>{-# SOURCE #-}</literal>-imported in a program must also be ordinarily imported (or
- else be one of the root modules). To put it another way, if <literal>M.hs-boot</literal> is
- reachable in the import graph, then <literal>M.hs</literal> must also be reachable.
- The command <command>ghc --make</command> will report an error if this
- condition is not satisfied.
+ <listitem><para> A module <literal>M</literal> that is
+ <literal>{-# SOURCE #-}</literal>-imported in a program will usually also be
+ ordinarily imported elsewhere. If not, <command>ghc --make</command>
+ automatically adds <literal>M</literal> to the set of moudles it tries to
+ compile and link, to ensure that <literal>M</literal>'s implementation is included in
+ the final program.
</para></listitem>
</itemizedlist>
</para>
<command>ghc</command> traces the dependencies, just like <command>ghc --make</command>
(a new feature in GHC 6.4).</para>
+ <para>Note that <literal>ghc -M</literal> needs to find a <emphasis>source
+ file</emphasis> for each module in the dependency graph, so that it can
+ parse the import declarations and follow dependencies. Any pre-compiled
+ modules without source files must therefore belong to a
+ package<footnote><para>This is a change in behaviour relative to 6.2 and
+ earlier.</para>
+ </footnote>.</para>
+
<para>By default, <command>ghc -M</command> generates all the
dependencies, and then concatenates them onto the end of
<filename>makefile</filename> (or