<sect2 id="source-files">
<title>Haskell source files</title>
+ <indexterm><primary>filenames</primary></indexterm>
+
<para>Each Haskell source module should be placed in a file on
its own.</para>
- <para>The file should usually be named after the module name, by
+ <para>Usually, the file should be named after the module name,
replacing dots in the module name by directory separators. For
example, on a Unix system, the module <literal>A.B.C</literal>
should be placed in the file <literal>A/B/C.hs</literal>,
- relative to some base directory. GHC's behaviour if this rule
- is not followed is fully defined by the following section (<xref
- linkend="output-files"/>).</para>
+ relative to some base directory. If the module is not going to
+ be imported by another module (<literal>Main</literal>, for
+ example), then you are free to use any filename for it.</para>
+
+ <indexterm><primary>unicode</primary></indexterm>
+
+ <para> GHC assumes that source files are
+ ASCII<indexterm><primary>ASCII</primary></indexterm> or
+ UTF-8<indexterm><primary>UTF-8</primary></indexterm> only, other
+ encodings<indexterm><primary>encoding</primary></indexterm> are
+ not recognised. However, invalid UTF-8 sequences will be
+ ignored in comments, so it is possible to use other encodings
+ such as
+ Latin-1<indexterm><primary>Latin-1</primary></indexterm>, as
+ long as the non-comment source code is ASCII only.</para>
</sect2>
<sect2 id="output-files">
an <firstterm>interface file</firstterm>. </para>
<para>The object file, which normally ends in a
- <literal>.o</literal> suffix (or <literal>.obj</literal> if
- you're on Windows), contains the compiled code for the module.</para>
+ <literal>.o</literal> suffix, contains the compiled code for the
+ module.</para>
<para>The interface file,
which normally ends in a <literal>.hi</literal> suffix, contains
<filename>Main.hs</filename>, and put the resulting
executable in <filename>foo.exe</filename> (not
<filename>foo</filename>).</para>
+
+ <para>If you use <command>ghc --make</command> and you don't
+ use the <option>-o</option>, the name GHC will choose
+ for the executable will be based on the name of the file
+ containing the module <literal>Main</literal>.
+ Note that with GHC the <literal>Main</literal> module doesn't
+ have to be put in file <filename>Main.hs</filename>.
+ Thus both
+<programlisting>
+ ghc --make Prog
+</programlisting>
+ and
+<programlisting>
+ ghc --make Prog.hs
+</programlisting>
+ will produce <filename>Prog</filename> (or
+ <filename>Prog.exe</filename> if you are on Windows).</para>
</listitem>
</varlistentry>
<varlistentry>
<term>
+ <option>-stubdir</option> <replaceable>dir</replaceable>
+ <indexterm><primary><option>-stubdir</option></primary></indexterm>
+ </term>
+ <listitem>
+ <para>Redirects all generated FFI stub files into
+ <replaceable>dir</replaceable>. Stub files are generated when the
+ Haskell source contains a <literal>foreign export</literal> or
+ <literal>foreign import "&wrapper"</literal> declaration (see <xref
+ linkend="foreign-export-ghc" />). The <option>-stubdir</option>
+ option behaves in exactly the same way as <option>-odir</option>
+ and <option>-hidir</option> with respect to hierarchical
+ modules.</para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
+ <term>
<option>-osuf</option> <replaceable>suffix</replaceable>
<indexterm><primary><option>-osuf</option></primary></indexterm>
</term>