Document the compiler --info flag
[ghc-hetmet.git] / docs / users_guide / using.xml
1 <?xml version="1.0" encoding="iso-8859-1"?>
2 <chapter id="using-ghc">
3   <title>Using GHC</title>
4
5   <indexterm><primary>GHC, using</primary></indexterm>
6   <indexterm><primary>using GHC</primary></indexterm>
7
8   <sect1>
9     <title>Options overview</title>
10     
11     <para>GHC's behaviour is controlled by
12     <firstterm>options</firstterm>, which for historical reasons are
13     also sometimes referred to as command-line flags or arguments.
14     Options can be specified in three ways:</para>
15
16     <sect2>
17       <title>Command-line arguments</title>
18       
19       <indexterm><primary>structure, command-line</primary></indexterm>
20       <indexterm><primary>command-line</primary><secondary>arguments</secondary></indexterm>
21       <indexterm><primary>arguments</primary><secondary>command-line</secondary></indexterm>
22       
23       <para>An invocation of GHC takes the following form:</para>
24
25 <screen>
26 ghc [argument...]
27 </screen>
28
29       <para>Command-line arguments are either options or file names.</para>
30
31       <para>Command-line options begin with <literal>-</literal>.
32       They may <emphasis>not</emphasis> be grouped:
33       <option>-vO</option> is different from <option>-v -O</option>.
34       Options need not precede filenames: e.g., <literal>ghc *.o -o
35       foo</literal>.  All options are processed and then applied to
36       all files; you cannot, for example, invoke <literal>ghc -c -O1
37       Foo.hs -O2 Bar.hs</literal> to apply different optimisation
38       levels to the files <filename>Foo.hs</filename> and
39       <filename>Bar.hs</filename>.</para>
40     </sect2>
41
42     <sect2 id="source-file-options">
43       <title>Command line options in source files</title>
44     
45       <indexterm><primary>source-file options</primary></indexterm>
46
47       <para>Sometimes it is useful to make the connection between a
48       source file and the command-line options it requires quite
49       tight. For instance, if a Haskell source file uses GHC
50       extensions, it will always need to be compiled with the
51       <option>-fglasgow-exts</option> option.  Rather than maintaining
52       the list of per-file options in a <filename>Makefile</filename>,
53       it is possible to do this directly in the source file using the
54       <literal>OPTIONS_GHC</literal> pragma <indexterm><primary>OPTIONS_GHC
55       pragma</primary></indexterm>:</para>
56
57 <programlisting>
58 {-# OPTIONS_GHC -fglasgow-exts #-}
59 module X where
60 ...
61 </programlisting>
62       
63       <para><literal>OPTIONS_GHC</literal> pragmas are only looked for at
64       the top of your source files, upto the first
65       (non-literate,non-empty) line not containing
66       <literal>OPTIONS_GHC</literal>. Multiple <literal>OPTIONS_GHC</literal>
67       pragmas are recognised.  Do not put comments before, or on the same line
68         as, the <literal>OPTIONS_GHC</literal> pragma.</para>
69
70       <para>Note that your command shell does not
71       get to the source file options, they are just included literally
72       in the array of command-line arguments the compiler
73       maintains internally, so you'll be desperately disappointed if
74       you try to glob etc. inside <literal>OPTIONS_GHC</literal>.</para>
75
76       <para>NOTE: the contents of OPTIONS_GHC are prepended to the
77       command-line options, so you <emphasis>do</emphasis> have the
78       ability to override OPTIONS_GHC settings via the command
79       line.</para>
80
81       <para>It is not recommended to move all the contents of your
82       Makefiles into your source files, but in some circumstances, the
83       <literal>OPTIONS_GHC</literal> pragma is the Right Thing. (If you
84       use <option>-keep-hc-file</option> and have OPTION flags in
85       your module, the OPTIONS_GHC will get put into the generated .hc
86       file).</para>
87     </sect2>
88
89     <sect2>
90       <title>Setting options in GHCi</title>
91
92       <para>Options may also be modified from within GHCi, using the
93       <literal>:set</literal> command.  See <xref linkend="ghci-set"/>
94       for more details.</para>
95     </sect2>
96   </sect1>
97     
98   <sect1 id="static-dynamic-flags">
99     <title>Static, Dynamic, and Mode options</title>
100     <indexterm><primary>static</primary><secondary>options</secondary>
101     </indexterm>
102     <indexterm><primary>dynamic</primary><secondary>options</secondary>
103     </indexterm>
104     <indexterm><primary>mode</primary><secondary>options</secondary>
105     </indexterm>
106
107     <para>Each of GHC's command line options is classified as
108     <firstterm>static</firstterm>, <firstterm>dynamic</firstterm> or
109       <firstterm>mode</firstterm>:</para>
110
111     <variablelist>
112       <varlistentry>
113         <term>Mode flags</term>
114         <listitem>
115           <para>For example, <option>--make</option> or <option>-E</option>.
116             There may only be a single mode flag on the command line.  The
117             available modes are listed in <xref linkend="modes"/>.</para>
118         </listitem>
119       </varlistentry>
120       <varlistentry>
121         <term>Dynamic Flags</term>
122         <listitem>
123           <para>Most non-mode flags fall into this category.  A dynamic flag
124             may be used on the command line, in a
125             <literal>GHC_OPTIONS</literal> pragma in a source file, or set
126             using <literal>:set</literal> in GHCi.</para>
127         </listitem>
128       </varlistentry>
129       <varlistentry>
130         <term>Static Flags</term>
131         <listitem>
132           <para>A few flags are "static", which means they can only be used on
133             the command-line, and remain in force over the entire GHC/GHCi
134             run.</para>
135         </listitem>
136       </varlistentry>
137     </variablelist>
138     
139     <para>The flag reference tables (<xref
140     linkend="flag-reference"/>) lists the status of each flag.</para>
141
142     <para>There are a few flags that are static except that they can
143     also be used with GHCi's <literal>:set</literal> command; these
144     are listed as &ldquo;static/<literal>:set</literal>&rdquo; in the
145     table.</para> 
146   </sect1>
147
148   <sect1 id="file-suffixes">
149     <title>Meaningful file suffixes</title>
150
151     <indexterm><primary>suffixes, file</primary></indexterm>
152     <indexterm><primary>file suffixes for GHC</primary></indexterm>
153
154     <para>File names with &ldquo;meaningful&rdquo; suffixes (e.g.,
155     <filename>.lhs</filename> or <filename>.o</filename>) cause the
156     &ldquo;right thing&rdquo; to happen to those files.</para>
157
158     <variablelist>
159
160       <varlistentry>
161         <term><filename>.hs</filename></term>
162         <listitem>
163           <para>A Haskell module.</para>
164         </listitem>
165       </varlistentry>
166
167       <varlistentry>
168         <term>
169           <filename>.lhs</filename>
170           <indexterm><primary><literal>lhs</literal> suffix</primary></indexterm>
171         </term>
172         <listitem>
173           <para>A &ldquo;literate Haskell&rdquo; module.</para>
174         </listitem>
175       </varlistentry>
176
177       <varlistentry>
178         <term><filename>.hi</filename></term>
179         <listitem>
180           <para>A Haskell interface file, probably
181           compiler-generated.</para>
182         </listitem>
183       </varlistentry>
184
185       <varlistentry>
186         <term><filename>.hc</filename></term>
187         <listitem>
188           <para>Intermediate C file produced by the Haskell
189           compiler.</para>
190         </listitem>
191       </varlistentry>
192
193       <varlistentry>
194         <term><filename>.c</filename></term>
195         <listitem>
196           <para>A C&nbsp;file not produced by the Haskell
197           compiler.</para>
198         </listitem>
199       </varlistentry>
200       
201       <varlistentry>
202         <term><filename>.s</filename></term>
203         <listitem>
204           <para>An assembly-language source file, usually produced by
205           the compiler.</para>
206         </listitem>
207       </varlistentry>
208
209       <varlistentry>
210         <term><filename>.o</filename></term>
211         <listitem>
212           <para>An object file, produced by an assembler.</para>
213         </listitem>
214       </varlistentry>
215     </variablelist>
216
217     <para>Files with other suffixes (or without suffixes) are passed
218     straight to the linker.</para>
219
220   </sect1>
221
222   <sect1 id="modes">
223     <title>Modes of operation</title>
224
225     <para>GHC's behaviour is firstly controlled by a mode flag.  Only
226     one of these flags may be given, but it does not necessarily need
227     to be the first option on the command-line.  The available modes
228     are:</para>
229
230     <variablelist>
231       <varlistentry>
232         <term>
233           <cmdsynopsis><command>ghc --interactive</command>
234           </cmdsynopsis>
235           <indexterm><primary>interactive mode</primary></indexterm>
236           <indexterm><primary>ghci</primary></indexterm>
237         </term>
238         <listitem>
239           <para>Interactive mode, which is also available as
240           <command>ghci</command>.  Interactive mode is described in
241           more detail in <xref linkend="ghci"/>.</para>
242         </listitem>
243       </varlistentry>
244       
245       <varlistentry>
246         <term>
247           <cmdsynopsis><command>ghc --make</command>
248           </cmdsynopsis>
249           <indexterm><primary>make mode</primary></indexterm>
250           <indexterm><primary><option>&ndash;&ndash;make</option></primary></indexterm>
251         </term>
252         <listitem>
253           <para>In this mode, GHC will build a multi-module Haskell
254           program automatically, figuring out dependencies for itself.
255           If you have a straightforward Haskell program, this is
256           likely to be much easier, and faster, than using
257           <command>make</command>.  Make mode is described in <xref
258           linkend="make-mode"/>.</para>
259         </listitem>
260       </varlistentry>
261
262       <varlistentry>
263         <term>
264           <cmdsynopsis><command>ghc -e</command>
265              <arg choice='plain'><replaceable>expr</replaceable></arg>
266           </cmdsynopsis>
267           <indexterm><primary>eval mode</primary></indexterm>
268         </term>
269         <listitem>
270           <para>Expression-evaluation mode.  This is very similar to
271           interactive mode, except that there is a single expression
272           to evaluate (<replaceable>expr</replaceable>) which is given
273           on the command line.  See <xref linkend="eval-mode"/> for
274           more details.</para>
275         </listitem>
276       </varlistentry>
277       
278       <varlistentry>
279         <term>
280           <cmdsynopsis>
281             <command>ghc -E</command>
282             <command>ghc -c</command>
283             <command>ghc -S</command>
284             <command>ghc -c</command>
285           </cmdsynopsis>
286           <indexterm><primary><option>-E</option></primary></indexterm>
287           <indexterm><primary><option>-C</option></primary></indexterm>
288           <indexterm><primary><option>-S</option></primary></indexterm>
289           <indexterm><primary><option>-c</option></primary></indexterm>
290         </term>
291         <listitem>
292           <para>This is the traditional batch-compiler mode, in which
293           GHC can compile source files one at a time, or link objects
294           together into an executable.  This mode also applies if
295           there is no other mode flag specified on the command line,
296           in which case it means that the specified files should be
297           compiled and then linked to form a program. See <xref
298           linkend="options-order"/>.</para>
299         </listitem>
300       </varlistentry>
301
302       <varlistentry>
303         <term>
304           <cmdsynopsis>
305             <command>ghc -M</command>
306           </cmdsynopsis>
307           <indexterm><primary>dependency-generation mode</primary></indexterm>
308         </term>
309         <listitem>
310           <para>Dependency-generation mode.  In this mode, GHC can be
311           used to generate dependency information suitable for use in
312           a <literal>Makefile</literal>.  See <xref
313           linkend="makefile-dependencies"/>.</para>
314         </listitem>
315       </varlistentry>
316
317       <varlistentry>
318         <term>
319           <cmdsynopsis>
320             <command>ghc --mk-dll</command>
321           </cmdsynopsis>
322           <indexterm><primary>DLL-creation mode</primary></indexterm>
323         </term>
324         <listitem>
325           <para>DLL-creation mode (Windows only).  See <xref
326           linkend="win32-dlls-create"/>.</para>
327         </listitem>
328       </varlistentry>
329
330       <varlistentry>
331         <term>
332           <cmdsynopsis>
333           <command>ghc --help</command> <command>ghc -?</command>
334             </cmdsynopsis>
335           <indexterm><primary><option>&ndash;&ndash;help</option></primary></indexterm>
336         </term>
337         <listitem>
338           <para>Cause GHC to spew a long usage message to standard
339           output and then exit.</para>
340         </listitem>
341       </varlistentry>
342
343       <varlistentry>
344         <term>
345           <cmdsynopsis>
346             <command>ghc --supported-languages</command>
347           </cmdsynopsis>
348           <indexterm><primary><option>&ndash;&ndash;supported-languages</option></primary></indexterm>
349         </term>
350         <listitem>
351           <para>Print the supported language extensions.</para>
352         </listitem>
353       </varlistentry>
354
355       <varlistentry>
356         <term>
357           <cmdsynopsis>
358             <command>ghc --info</command>
359           </cmdsynopsis>
360           <indexterm><primary><option>&ndash;&ndash;info</option></primary></indexterm>
361         </term>
362         <listitem>
363           <para>Print information about the compiler.</para>
364         </listitem>
365       </varlistentry>
366
367       <varlistentry>
368         <term>
369           <cmdsynopsis>
370             <command>ghc --version</command>
371             <command>ghc -V</command>
372           </cmdsynopsis>
373           <indexterm><primary><option>-V</option></primary></indexterm>
374           <indexterm><primary><option>&ndash;&ndash;version</option></primary></indexterm>
375         </term>
376         <listitem>
377           <para>Print a one-line string including GHC's version number.</para>
378         </listitem>
379       </varlistentry>
380
381       <varlistentry>
382         <term>
383           <cmdsynopsis>
384             <command>ghc --numeric-version</command>
385           </cmdsynopsis>
386           <indexterm><primary><option>&ndash;&ndash;numeric-version</option></primary></indexterm>
387         </term>
388         <listitem>
389           <para>Print GHC's numeric version number only.</para>
390         </listitem>
391       </varlistentry>
392
393       <varlistentry>
394         <term>
395           <cmdsynopsis>
396             <command>ghc --print-libdir</command>
397           </cmdsynopsis>
398           <indexterm><primary><option>&ndash;&ndash;print-libdir</option></primary></indexterm>
399         </term>
400         <listitem>
401           <para>Print the path to GHC's library directory.  This is
402           the top of the directory tree containing GHC's libraries,
403           interfaces, and include files (usually something like
404           <literal>/usr/local/lib/ghc-5.04</literal> on Unix).  This
405           is the value of
406           <literal>$libdir</literal><indexterm><primary><literal>libdir</literal></primary></indexterm>
407       in the package configuration file
408       (see <xref linkend="packages"/>).</para>
409         </listitem>
410       </varlistentry>
411
412     </variablelist>
413
414     <sect2 id="make-mode">
415       <title>Using <command>ghc</command> <option>&ndash;&ndash;make</option></title>
416       <indexterm><primary><option>&ndash;&ndash;make</option></primary></indexterm>
417       <indexterm><primary>separate compilation</primary></indexterm>
418       
419       <para>When given the <option>&ndash;&ndash;make</option> option,
420       GHC will build a multi-module Haskell program by following
421       dependencies from one or more root modules (usually just
422       <literal>Main</literal>).  For example, if your
423       <literal>Main</literal> module is in a file called
424       <filename>Main.hs</filename>, you could compile and link the
425       program like this:</para>
426
427 <screen>
428 ghc &ndash;&ndash;make Main.hs
429 </screen>
430
431       <para>The command line may contain any number of source file
432       names or module names; GHC will figure out all the modules in
433       the program by following the imports from these initial modules.
434       It will then attempt to compile each module which is out of
435       date, and finally, if there is a <literal>Main</literal> module,
436       the program will also be linked into an executable.</para>
437
438       <para>The main advantages to using <literal>ghc
439       &ndash;&ndash;make</literal> over traditional
440       <literal>Makefile</literal>s are:</para>
441
442       <itemizedlist>
443         <listitem>
444           <para>GHC doesn't have to be restarted for each compilation,
445           which means it can cache information between compilations.
446           Compiling a multi-module program with <literal>ghc
447           &ndash;&ndash;make</literal> can be up to twice as fast as
448           running <literal>ghc</literal> individually on each source
449           file.</para>
450         </listitem>
451         <listitem>
452           <para>You don't have to write a <literal>Makefile</literal>.</para>
453           <indexterm><primary><literal>Makefile</literal>s</primary><secondary>avoiding</secondary></indexterm>
454         </listitem>
455         <listitem>
456           <para>GHC re-calculates the dependencies each time it is
457           invoked, so the dependencies never get out of sync with the
458           source.</para>
459         </listitem>
460       </itemizedlist>
461       
462       <para>Any of the command-line options described in the rest of
463       this chapter can be used with
464       <option>&ndash;&ndash;make</option>, but note that any options
465       you give on the command line will apply to all the source files
466       compiled, so if you want any options to apply to a single source
467       file only, you'll need to use an <literal>OPTIONS_GHC</literal>
468       pragma (see <xref linkend="source-file-options"/>).</para>
469
470       <para>If the program needs to be linked with additional objects
471       (say, some auxiliary C code), then the object files can be
472       given on the command line and GHC will include them when linking
473       the executable.</para>
474       
475       <para>Note that GHC can only follow dependencies if it has the
476       source file available, so if your program includes a module for
477       which there is no source file, even if you have an object and an
478       interface file for the module, then GHC will complain.  The
479       exception to this rule is for package modules, which may or may
480       not have source files.</para>
481
482       <para>The source files for the program don't all need to be in
483       the same directory; the <option>-i</option> option can be used
484       to add directories to the search path (see <xref
485       linkend="search-path"/>).</para>
486     </sect2>
487   
488     <sect2 id="eval-mode">
489       <title>Expression evaluation mode</title>
490
491       <para>This mode is very similar to interactive mode, except that
492       there is a single expression to evaluate which is specified on
493       the command line as an argument to the <option>-e</option>
494       option:</para>
495
496 <screen>
497 ghc -e <replaceable>expr</replaceable>
498 </screen>
499
500       <para>Haskell source files may be named on the command line, and
501       they will be loaded exactly as in interactive mode.  The
502       expression is evaluated in the context of the loaded
503       modules.</para>
504
505       <para>For example, to load and run a Haskell program containing
506       a module <literal>Main</literal>, we might say</para>
507
508 <screen>
509 ghc -e Main.main Main.hs
510 </screen>
511       
512       <para>or we can just use this mode to evaluate expressions in
513       the context of the <literal>Prelude</literal>:</para>
514
515 <screen>
516 $ ghc -e "interact (unlines.map reverse.lines)"
517 hello
518 olleh
519 </screen>
520     </sect2>
521
522     <sect2 id="options-order">
523       <title>Batch compiler mode</title>
524       
525       <para>In <emphasis>batch mode</emphasis>, GHC will compile one or more source files
526       given on the command line.</para>
527       
528       <para>The first phase to run is determined by each input-file
529       suffix, and the last phase is determined by a flag.  If no
530       relevant flag is present, then go all the way through to linking.
531       This table summarises:</para>
532       
533       <informaltable>
534         <tgroup cols="4">
535           <colspec align="left"/>
536           <colspec align="left"/>
537           <colspec align="left"/>
538           <colspec align="left"/>
539           
540           <thead>
541             <row>
542               <entry>Phase of the compilation system</entry>
543               <entry>Suffix saying &ldquo;start here&rdquo;</entry>
544               <entry>Flag saying &ldquo;stop after&rdquo;</entry>
545               <entry>(suffix of) output file</entry>
546             </row>
547           </thead>
548           <tbody>
549             <row>
550               <entry>literate pre-processor</entry>
551               <entry><literal>.lhs</literal></entry>
552               <entry>-</entry>
553               <entry><literal>.hs</literal></entry>
554             </row>
555             
556             <row>
557               <entry>C pre-processor (opt.) </entry>
558               <entry><literal>.hs</literal> (with
559               <option>-cpp</option>)</entry>
560               <entry><option>-E</option></entry>
561               <entry><literal>.hspp</literal></entry>
562             </row>
563             
564             <row>
565               <entry>Haskell compiler</entry>
566               <entry><literal>.hs</literal></entry>
567               <entry><option>-C</option>, <option>-S</option></entry>
568               <entry><literal>.hc</literal>, <literal>.s</literal></entry>
569             </row>
570             
571             <row>
572               <entry>C compiler (opt.)</entry>
573               <entry><literal>.hc</literal> or <literal>.c</literal></entry>
574               <entry><option>-S</option></entry>
575               <entry><literal>.s</literal></entry>
576             </row>
577             
578             <row>
579               <entry>assembler</entry>
580               <entry><literal>.s</literal></entry>
581               <entry><option>-c</option></entry>
582               <entry><literal>.o</literal></entry>
583             </row>
584             
585             <row>
586               <entry>linker</entry>
587               <entry><replaceable>other</replaceable></entry>
588               <entry>-</entry>
589               <entry><filename>a.out</filename></entry>
590             </row>
591           </tbody>
592         </tgroup>
593       </informaltable>
594       
595       <indexterm><primary><option>-C</option></primary></indexterm>
596       <indexterm><primary><option>-E</option></primary></indexterm>
597       <indexterm><primary><option>-S</option></primary></indexterm>
598       <indexterm><primary><option>-c</option></primary></indexterm>
599       
600       <para>Thus, a common invocation would be: </para>
601
602 <screen>
603 ghc -c Foo.hs</screen>
604       
605       <para>to compile the Haskell source file
606       <filename>Foo.hs</filename> to an object file
607       <filename>Foo.o</filename>.</para>
608
609       <para>Note: What the Haskell compiler proper produces depends on
610       whether a native-code generator<indexterm><primary>native-code
611       generator</primary></indexterm> is used (producing assembly
612       language) or not (producing C).  See <xref
613       linkend="options-codegen"/> for more details.</para>
614
615       <para>Note: C pre-processing is optional, the
616       <option>-cpp</option><indexterm><primary><option>-cpp</option></primary></indexterm>
617       flag turns it on.  See <xref linkend="c-pre-processor"/> for more
618       details.</para>
619       
620       <para>Note: The option <option>-E</option><indexterm><primary>-E
621       option</primary></indexterm> runs just the pre-processing passes
622       of the compiler, dumping the result in a file.</para>
623
624       <sect3 id="overriding-suffixes">
625         <title>Overriding the default behaviour for a file</title>
626
627         <para>As described above, the way in which a file is processed by GHC
628           depends on its suffix.  This behaviour can be overriden using the
629           <option>-x</option> option:</para>
630
631         <variablelist>
632           <varlistentry>
633             <term><option>-x</option> <replaceable>suffix</replaceable>
634                       <indexterm><primary><option>-x</option></primary>
635               </indexterm></term>
636               <listitem>
637                 <para>Causes all files following this option on the command
638                   line to be processed as if they had the suffix
639                   <replaceable>suffix</replaceable>.  For example, to compile a
640                   Haskell module in the file <literal>M.my-hs</literal>,
641                   use <literal>ghc -c -x hs M.my-hs</literal>.</para>
642               </listitem>
643           </varlistentry>
644         </variablelist>
645       </sect3>
646
647     </sect2>
648   </sect1>
649
650   <sect1 id="options-help">
651     <title>Help and verbosity options</title>
652
653     <indexterm><primary>help options</primary></indexterm>
654     <indexterm><primary>verbosity options</primary></indexterm>
655
656     <para>See also the <option>--help</option>, <option>--version</option>, <option>--numeric-version</option>,
657     and <option>--print-libdir</option> modes in <xref linkend="modes"/>.</para>
658     <variablelist>
659       <varlistentry>
660         <term>
661           <option>-n</option>
662           <indexterm><primary><option>-n</option></primary></indexterm>
663         </term>
664         <listitem>
665           <para>Does a dry-run, i.e. GHC goes through all the motions
666           of compiling as normal, but does not actually run any
667           external commands.</para>
668         </listitem>
669       </varlistentry>
670
671       <varlistentry>
672         <term>
673           <option>-v</option>
674           <indexterm><primary><option>-v</option></primary></indexterm>
675         </term>
676         <listitem>
677           <para>The <option>-v</option> option makes GHC
678           <emphasis>verbose</emphasis>: it reports its version number
679           and shows (on stderr) exactly how it invokes each phase of
680           the compilation system.  Moreover, it passes the
681           <option>-v</option> flag to most phases; each reports its
682           version number (and possibly some other information).</para>
683
684           <para>Please, oh please, use the <option>-v</option> option
685           when reporting bugs!  Knowing that you ran the right bits in
686           the right order is always the first thing we want to
687           verify.</para>
688         </listitem>
689       </varlistentry>
690         
691       <varlistentry>
692         <term>
693           <option>-v</option><replaceable>n</replaceable>
694           <indexterm><primary><option>-v</option></primary></indexterm>
695         </term>
696         <listitem>
697           <para>To provide more control over the compiler's verbosity,
698           the <option>-v</option> flag takes an optional numeric
699           argument.  Specifying <option>-v</option> on its own is
700           equivalent to <option>-v3</option>, and the other levels
701           have the following meanings:</para>
702           
703           <variablelist>
704             <varlistentry>
705               <term><option>-v0</option></term>
706               <listitem>
707                 <para>Disable all non-essential messages (this is the
708                 default).</para>
709               </listitem>
710             </varlistentry>
711
712             <varlistentry>
713               <term><option>-v1</option></term>
714               <listitem>
715                 <para>Minimal verbosity: print one line per
716                 compilation (this is the default when
717                 <option>&ndash;&ndash;make</option> or
718                 <option>&ndash;&ndash;interactive</option> is on).</para>
719               </listitem>
720             </varlistentry>
721
722             <varlistentry>
723               <term><option>-v2</option></term>
724               <listitem>
725                 <para>Print the name of each compilation phase as it
726                 is executed. (equivalent to
727                 <option>-dshow-passes</option>).</para>
728               </listitem>
729             </varlistentry>
730
731             <varlistentry>
732               <term><option>-v3</option></term>
733               <listitem>
734                 <para>The same as <option>-v2</option>, except that in
735                 addition the full command line (if appropriate) for
736                 each compilation phase is also printed.</para>
737               </listitem>
738             </varlistentry>
739
740             <varlistentry>
741               <term><option>-v4</option></term>
742               <listitem>
743                 <para>The same as <option>-v3</option> except that the
744                 intermediate program representation after each
745                 compilation phase is also printed (excluding
746                 preprocessed and C/assembly files).</para>
747               </listitem>
748             </varlistentry>
749           </variablelist>
750         </listitem>
751       </varlistentry>
752       
753       <varlistentry>
754         <term><option>-ferror-spans</option>
755           <indexterm><primary><option>-ferror-spans</option></primary>
756           </indexterm>
757         </term>
758         <listitem>
759           <para>Causes GHC to emit the full source span of the
760           syntactic entity relating to an error message.  Normally, GHC
761           emits the source location of the start of the syntactic
762           entity only.</para>
763
764           <para>For example:</para>
765
766 <screen>test.hs:3:6: parse error on input `where'</screen>
767
768           <para>becomes:</para>
769
770 <screen>test296.hs:3:6-10: parse error on input `where'</screen>
771
772           <para>And multi-line spans are possible too:</para>
773
774 <screen>test.hs:(5,4)-(6,7):
775     Conflicting definitions for `a'
776     Bound at: test.hs:5:4
777               test.hs:6:7
778     In the binding group for: a, b, a</screen>
779
780           <para>Note that line numbers start counting at one, but
781           column numbers start at zero.  This choice was made to
782           follow existing convention (i.e. this is how Emacs does
783           it).</para>
784         </listitem>
785       </varlistentry>
786
787       <varlistentry>
788         <term><option>-H</option><replaceable>size</replaceable>
789         <indexterm><primary><option>-H</option></primary></indexterm>
790         </term>
791         <listitem>
792           <para>Set the minimum size of the heap to
793           <replaceable>size</replaceable>.
794           This option is equivalent to
795           <literal>+RTS&nbsp;-H<replaceable>size</replaceable></literal>,
796           see <xref linkend="rts-options-gc" />.
797           </para>
798         </listitem>
799       </varlistentry>
800
801       <varlistentry>
802         <term><option>-Rghc-timing</option>
803         <indexterm><primary><option>-Rghc-timing</option></primary></indexterm>
804         </term>
805         <listitem>
806           <para>Prints a one-line summary of timing statistics for the
807           GHC run.  This option is equivalent to
808           <literal>+RTS&nbsp;-tstderr</literal>, see <xref
809           linkend="rts-options-gc" />.
810           </para>
811         </listitem>
812       </varlistentry>
813     </variablelist>
814   </sect1>
815
816   &separate;
817
818   <sect1 id="options-sanity">
819     <title>Warnings and sanity-checking</title>
820
821     <indexterm><primary>sanity-checking options</primary></indexterm>
822     <indexterm><primary>warnings</primary></indexterm>
823
824
825     <para>GHC has a number of options that select which types of
826     non-fatal error messages, otherwise known as warnings, can be
827     generated during compilation.  By default, you get a standard set
828     of warnings which are generally likely to indicate bugs in your
829     program.  These are:
830     <option>-fwarn-overlapping-patterns</option>,
831     <option>-fwarn-deprecations</option>,
832     <option>-fwarn-duplicate-exports</option>,
833     <option>-fwarn-missing-fields</option>, and
834     <option>-fwarn-missing-methods</option>.  The following flags are
835     simple ways to select standard &ldquo;packages&rdquo; of warnings:
836     </para>
837
838     <variablelist>
839
840       <varlistentry>
841         <term><option>-W</option>:</term>
842         <listitem>
843           <indexterm><primary>-W option</primary></indexterm>
844           <para>Provides the standard warnings plus
845           <option>-fwarn-incomplete-patterns</option>,
846           <option>-fwarn-dodgy-imports</option>,
847           <option>-fwarn-unused-matches</option>,
848           <option>-fwarn-unused-imports</option>, and
849           <option>-fwarn-unused-binds</option>.</para>
850         </listitem>
851       </varlistentry>
852
853       <varlistentry>
854         <term><option>-Wall</option>:</term>
855         <listitem>
856           <indexterm><primary><option>-Wall</option></primary></indexterm>
857           <para>Turns on all warning options that indicate potentially
858           suspicious code.  The warnings that are
859           <emphasis>not</emphasis> enabled by <option>-Wall</option>
860           are
861             <option>-fwarn-simple-patterns</option>,
862             <option>-fwarn-tabs</option>,
863             <option>-fwarn-incomplete-record-updates</option>,
864             <option>-fwarn-monomorphism-restriction</option>, and
865             <option>-fwarn-implicit-prelude</option>.</para>
866         </listitem>
867       </varlistentry>
868
869       <varlistentry>
870         <term><option>-w</option>:</term>
871         <listitem>
872           <indexterm><primary><option>-w</option></primary></indexterm>
873           <para>Turns off all warnings, including the standard ones and
874       those that <literal>-Wall</literal> doesn't enable.</para>
875         </listitem>
876       </varlistentry>
877
878       <varlistentry>
879         <term><option>-Werror</option>:</term>
880         <listitem>
881           <indexterm><primary><option>-Werror</option></primary></indexterm>
882           <para>Makes any warning into a fatal error. Useful so that you don't 
883             miss warnings when doing batch compilation. </para>
884         </listitem>
885       </varlistentry>
886
887     </variablelist>
888
889     <para>The full set of warning options is described below.  To turn
890     off any warning, simply give the corresponding
891     <option>-fno-warn-...</option> option on the command line.</para>
892
893     <variablelist>
894
895       <varlistentry>
896         <term><option>-fwarn-deprecations</option>:</term>
897         <listitem>
898           <indexterm><primary><option>-fwarn-deprecations</option></primary>
899           </indexterm>
900           <indexterm><primary>deprecations</primary></indexterm>
901           <para>Causes a warning to be emitted when a deprecated
902           function or type is used.  Entities can be marked as
903           deprecated using a pragma, see <xref
904           linkend="deprecated-pragma"/>.</para>
905
906           <para>This option is on by default.</para>
907         </listitem>
908       </varlistentry>
909
910       <varlistentry>
911         <term><option>-fwarn-dodgy-imports</option>:</term>
912         <listitem>
913           <indexterm><primary><option>-fwarn-dodgy-imports</option></primary>
914           </indexterm>
915           <para>Causes a warning to be emitted when a a datatype
916       <literal>T</literal> is imported
917       with all constructors, i.e. <literal>T(..)</literal>, but has been
918       exported abstractly, i.e. <literal>T</literal>.</para>
919         </listitem>
920       </varlistentry>
921
922       <varlistentry>
923         <term><option>-fwarn-duplicate-exports</option>:</term>
924         <listitem>
925           <indexterm><primary><option>-fwarn-duplicate-exports</option></primary></indexterm>
926           <indexterm><primary>duplicate exports, warning</primary></indexterm>
927           <indexterm><primary>export lists, duplicates</primary></indexterm>
928
929           <para>Have the compiler warn about duplicate entries in
930           export lists. This is useful information if you maintain
931           large export lists, and want to avoid the continued export
932           of a definition after you've deleted (one) mention of it in
933           the export list.</para>
934
935           <para>This option is on by default.</para>
936         </listitem>
937       </varlistentry>
938
939       <varlistentry>
940         <term><option>-fwarn-hi-shadowing</option>:</term>
941         <listitem>
942           <indexterm><primary><option>-fwarn-hi-shadowing</option></primary></indexterm>
943           <indexterm><primary>shadowing</primary>
944             <secondary>interface files</secondary></indexterm>
945
946           <para>Causes the compiler to emit a warning when a module or
947           interface file in the current directory is shadowing one
948           with the same module name in a library or other
949           directory.</para>
950         </listitem>
951       </varlistentry>
952
953       <varlistentry>
954         <term><option>-fwarn-implicit-prelude</option>:</term>
955         <listitem>
956           <indexterm><primary><option>-fwarn-implicit-prelude</option></primary></indexterm>
957           <indexterm><primary>implicit prelude, warning</primary></indexterm>
958           <para>Have the compiler warn if the Prelude is implicitly
959           imported.  This happens unless either the Prelude module is
960           explicitly imported with an <literal>import ... Prelude ...</literal>
961           line, or this implicit import is disabled (either by
962           <option>-fno-implicit-prelude</option> or a
963           <literal>LANGUAGE NoImplicitPrelude</literal> pragma).</para>
964
965           <para>Note that no warning is given for syntax that implicitly
966           refers to the Prelude, even if <option>-fno-implicit-prelude</option>
967           would change whether it refers to the Prelude.
968           For example, no warning is given when
969           <literal>368</literal> means
970           <literal>Prelude.fromInteger (368::Prelude.Integer)</literal>
971           (where <literal>Prelude</literal> refers to the actual Prelude module,
972           regardless of the imports of the module being compiled).</para>
973
974           <para>This warning is off by default.</para>
975         </listitem>
976       </varlistentry>
977
978       <varlistentry>
979         <term><option>-fwarn-incomplete-patterns</option>:</term>
980         <listitem>
981           <indexterm><primary><option>-fwarn-incomplete-patterns</option></primary></indexterm>
982           <indexterm><primary>incomplete patterns, warning</primary></indexterm>
983           <indexterm><primary>patterns, incomplete</primary></indexterm>
984
985           <para>Similarly for incomplete patterns, the function
986           <function>g</function> below will fail when applied to
987           non-empty lists, so the compiler will emit a warning about
988           this when <option>-fwarn-incomplete-patterns</option> is
989           enabled.</para>
990
991 <programlisting>
992 g [] = 2
993 </programlisting>
994
995           <para>This option isn't enabled by default because it can be
996           a bit noisy, and it doesn't always indicate a bug in the
997           program.  However, it's generally considered good practice
998           to cover all the cases in your functions.</para>
999         </listitem>
1000       </varlistentry>
1001
1002       <varlistentry>
1003         <term><option>-fwarn-incomplete-record-updates</option>:</term>
1004         <listitem>
1005           <indexterm><primary><option>-fwarn-incomplete-record-updates</option></primary></indexterm>
1006           <indexterm><primary>incomplete record updates, warning</primary></indexterm>
1007           <indexterm><primary>record updates, incomplete</primary></indexterm>
1008
1009           <para>The function
1010           <function>f</function> below will fail when applied to
1011           <literal>Bar</literal>, so the compiler will emit a warning about
1012           this when <option>-fwarn-incomplete-record-updates</option> is
1013           enabled.</para>
1014
1015 <programlisting>
1016 data Foo = Foo { x :: Int }
1017          | Bar
1018
1019 f :: Foo -> Foo
1020 f foo = foo { x = 6 }
1021 </programlisting>
1022
1023           <para>This option isn't enabled by default because it can be
1024           very noisy, and it often doesn't indicate a bug in the
1025           program.</para>
1026         </listitem>
1027       </varlistentry>
1028
1029       <varlistentry>
1030         <term>
1031           <option>-fwarn-missing-fields</option>:
1032           <indexterm><primary><option>-fwarn-missing-fields</option></primary></indexterm>
1033           <indexterm><primary>missing fields, warning</primary></indexterm>
1034           <indexterm><primary>fields, missing</primary></indexterm>
1035         </term>
1036         <listitem>
1037
1038           <para>This option is on by default, and warns you whenever
1039           the construction of a labelled field constructor isn't
1040           complete, missing initializers for one or more fields. While
1041           not an error (the missing fields are initialised with
1042           bottoms), it is often an indication of a programmer error.</para>
1043         </listitem>
1044       </varlistentry>
1045
1046       <varlistentry>
1047         <term><option>-fwarn-missing-methods</option>:</term>
1048         <listitem>
1049           <indexterm><primary><option>-fwarn-missing-methods</option></primary></indexterm>
1050           <indexterm><primary>missing methods, warning</primary></indexterm>
1051           <indexterm><primary>methods, missing</primary></indexterm>
1052
1053           <para>This option is on by default, and warns you whenever
1054           an instance declaration is missing one or more methods, and
1055           the corresponding class declaration has no default
1056           declaration for them.</para>
1057           <para>The warning is suppressed if the method name
1058           begins with an underscore.  Here's an example where this is useful:
1059             <programlisting>
1060               class C a where
1061                 _simpleFn :: a -> String
1062                 complexFn :: a -> a -> String
1063                 complexFn x y = ... _simpleFn ...
1064               </programlisting>
1065             The idea is that: (a) users of the class will only call <literal>complexFn</literal>; 
1066             never <literal>_simpleFn</literal>; and (b)
1067             instance declarations can define either <literal>complexFn</literal> or <literal>_simpleFn</literal>.
1068             </para>
1069         </listitem>
1070       </varlistentry>
1071
1072       <varlistentry>
1073         <term><option>-fwarn-missing-signatures</option>:</term>
1074         <listitem>
1075           <indexterm><primary><option>-fwarn-missing-signatures</option></primary></indexterm>
1076           <indexterm><primary>type signatures, missing</primary></indexterm>
1077
1078           <para>If you would like GHC to check that every top-level
1079           function/value has a type signature, use the
1080           <option>-fwarn-missing-signatures</option> option.  As part of
1081             the warning GHC also reports the inferred type.  The
1082           option is off by default.</para>
1083         </listitem>
1084       </varlistentry>
1085
1086       <varlistentry>
1087         <term><option>-fwarn-name-shadowing</option>:</term>
1088         <listitem>
1089           <indexterm><primary><option>-fwarn-name-shadowing</option></primary></indexterm>
1090           <indexterm><primary>shadowing, warning</primary></indexterm>
1091           
1092           <para>This option causes a warning to be emitted whenever an
1093           inner-scope value has the same name as an outer-scope value,
1094           i.e. the inner value shadows the outer one.  This can catch
1095           typographical errors that turn into hard-to-find bugs, e.g.,
1096           in the inadvertent capture of what would be a recursive call in
1097           <literal>f = ... let f = id in ... f ...</literal>.</para>
1098         </listitem>
1099       </varlistentry>
1100
1101       <varlistentry>
1102         <term><option>-fwarn-orphans</option>:</term>
1103         <listitem>
1104           <indexterm><primary><option>-fwarn-orphans</option></primary></indexterm>
1105           <indexterm><primary>orphan instances, warning</primary></indexterm>
1106           <indexterm><primary>orphan rules, warning</primary></indexterm>
1107           
1108           <para>This option causes a warning to be emitted whenever the 
1109             module contains an "orphan" instance declaration or rewrite rule.
1110             An instance declartion is an orphan if it appears in a module in
1111             which neither the class nor the type being instanced are declared
1112             in the same module.  A rule is an orphan if it is a rule for a
1113             function declared in another module.  A module containing any
1114           orphans is called an orphan module.</para>
1115           <para>The trouble with orphans is that GHC must pro-actively read the interface
1116             files for all orphan modules, just in case their instances or rules
1117             play a role, whether or not the module's interface would otherwise 
1118             be of any use.  Other things being equal, avoid orphan modules.</para>
1119         </listitem>
1120       </varlistentry>
1121
1122       <varlistentry>
1123         <term>
1124           <option>-fwarn-overlapping-patterns</option>:
1125           <indexterm><primary><option>-fwarn-overlapping-patterns</option></primary></indexterm>
1126           <indexterm><primary>overlapping patterns, warning</primary></indexterm>
1127           <indexterm><primary>patterns, overlapping</primary></indexterm>
1128         </term>
1129         <listitem>
1130           <para>By default, the compiler will warn you if a set of
1131           patterns are overlapping, e.g.,</para>
1132
1133 <programlisting>
1134 f :: String -&#62; Int
1135 f []     = 0
1136 f (_:xs) = 1
1137 f "2"    = 2
1138 </programlisting>
1139
1140           <para>where the last pattern match in <function>f</function>
1141           won't ever be reached, as the second pattern overlaps
1142           it. More often than not, redundant patterns is a programmer
1143           mistake/error, so this option is enabled by default.</para>
1144         </listitem>
1145       </varlistentry>
1146
1147       <varlistentry>
1148         <term><option>-fwarn-simple-patterns</option>:</term>
1149         <listitem>
1150           <indexterm><primary><option>-fwarn-simple-patterns</option></primary>
1151           </indexterm>
1152           <para>Causes the compiler to warn about lambda-bound
1153           patterns that can fail, eg. <literal>\(x:xs)->...</literal>.
1154           Normally, these aren't treated as incomplete patterns by
1155           <option>-fwarn-incomplete-patterns</option>.</para>
1156           <para>&ldquo;Lambda-bound patterns&rdquo; includes all places where there is a single pattern,
1157             including list comprehensions and do-notation.  In these cases, a pattern-match 
1158             failure is quite legitimate, and triggers filtering (list comprehensions) or
1159             the monad <literal>fail</literal> operation (monads). For example:
1160             <programlisting>
1161               f :: [Maybe a] -> [a]
1162               f xs = [y | Just y &lt;- xs]
1163               </programlisting>
1164             Switching on <option>-fwarn-simple-patterns</option> will elicit warnings about
1165             these probably-innocent cases, which is why the flag is off by default. </para>
1166         </listitem>
1167       </varlistentry>
1168
1169       <varlistentry>
1170         <term><option>-fwarn-tabs</option>:</term>
1171         <listitem>
1172           <indexterm><primary><option>-fwarn-tabs</option></primary></indexterm>
1173           <indexterm><primary>tabs, warning</primary></indexterm>
1174           <para>Have the compiler warn if there are tabs in your source
1175           file.</para>
1176
1177           <para>This warning is off by default.</para>
1178         </listitem>
1179       </varlistentry>
1180
1181       <varlistentry>
1182         <term><option>-fwarn-type-defaults</option>:</term>
1183         <listitem>
1184           <indexterm><primary><option>-fwarn-type-defaults</option></primary></indexterm>
1185           <indexterm><primary>defaulting mechanism, warning</primary></indexterm>
1186           <para>Have the compiler warn/inform you where in your source
1187           the Haskell defaulting mechanism for numeric types kicks
1188           in. This is useful information when converting code from a
1189           context that assumed one default into one with another,
1190           e.g., the &lsquo;default default&rsquo; for Haskell 1.4 caused the
1191           otherwise unconstrained value <constant>1</constant> to be
1192           given the type <literal>Int</literal>, whereas Haskell 98
1193           defaults it to <literal>Integer</literal>.  This may lead to
1194           differences in performance and behaviour, hence the
1195           usefulness of being non-silent about this.</para>
1196
1197           <para>This warning is off by default.</para>
1198         </listitem>
1199       </varlistentry>
1200
1201       <varlistentry>
1202         <term><option>-fwarn-monomorphism-restriction</option>:</term>
1203         <listitem>
1204           <indexterm><primary><option>-fwarn-monomorphism-restriction</option></primary></indexterm>
1205           <indexterm><primary>monomorphism restriction, warning</primary></indexterm>
1206           <para>Have the compiler warn/inform you where in your source
1207           the Haskell Monomorphism Restriction is applied.  If applied silently
1208           the MR can give rise to unexpected behaviour, so it can be helpful
1209           to have an explicit warning that it is being applied.</para>
1210
1211           <para>This warning is off by default.</para>
1212         </listitem>
1213       </varlistentry>
1214
1215       <varlistentry>
1216         <term><option>-fwarn-unused-binds</option>:</term>
1217         <listitem>
1218           <indexterm><primary><option>-fwarn-unused-binds</option></primary></indexterm>
1219           <indexterm><primary>unused binds, warning</primary></indexterm>
1220           <indexterm><primary>binds, unused</primary></indexterm>
1221           <para>Report any function definitions (and local bindings)
1222           which are unused.  For top-level functions, the warning is
1223           only given if the binding is not exported.</para>
1224           <para>A definition is regarded as "used" if (a) it is exported, or (b) it is
1225             mentioned in the right hand side of another definition that is used, or (c) the 
1226             function it defines begins with an underscore.  The last case provides a 
1227             way to suppress unused-binding warnings selectively.  </para>
1228           <para> Notice that a variable
1229             is reported as unused even if it appears in the right-hand side of another
1230             unused binding. </para>
1231         </listitem>
1232       </varlistentry>
1233
1234       <varlistentry>
1235         <term><option>-fwarn-unused-imports</option>:</term>
1236         <listitem>
1237           <indexterm><primary><option>-fwarn-unused-imports</option></primary></indexterm>
1238           <indexterm><primary>unused imports, warning</primary></indexterm>
1239           <indexterm><primary>imports, unused</primary></indexterm>
1240
1241           <para>Report any modules that are explicitly imported but
1242           never used.  However, the form <literal>import M()</literal> is
1243           never reported as an unused import, because it is a useful idiom
1244           for importing instance declarations, which are anonymous in Haskell.</para>
1245         </listitem>
1246       </varlistentry>
1247
1248       <varlistentry>
1249         <term><option>-fwarn-unused-matches</option>:</term>
1250         <listitem>
1251           <indexterm><primary><option>-fwarn-unused-matches</option></primary></indexterm>
1252           <indexterm><primary>unused matches, warning</primary></indexterm>
1253           <indexterm><primary>matches, unused</primary></indexterm>
1254
1255           <para>Report all unused variables which arise from pattern
1256           matches, including patterns consisting of a single variable.
1257           For instance <literal>f x y = []</literal> would report
1258           <varname>x</varname> and <varname>y</varname> as unused.  The
1259           warning is suppressed if the variable name begins with an underscore, thus:
1260             <programlisting>
1261                f _x = True
1262             </programlisting>
1263           </para>
1264         </listitem>
1265       </varlistentry>
1266
1267     </variablelist>
1268
1269     <para>If you're feeling really paranoid, the
1270     <option>-dcore-lint</option>
1271     option<indexterm><primary><option>-dcore-lint</option></primary></indexterm>
1272     is a good choice.  It turns on heavyweight intra-pass
1273     sanity-checking within GHC.  (It checks GHC's sanity, not
1274     yours.)</para>
1275
1276   </sect1>
1277
1278   &packages;
1279
1280   <sect1 id="options-optimise">
1281     <title>Optimisation (code improvement)</title>
1282
1283     <indexterm><primary>optimisation</primary></indexterm>
1284     <indexterm><primary>improvement, code</primary></indexterm>
1285
1286     <para>The <option>-O*</option> options specify convenient
1287     &ldquo;packages&rdquo; of optimisation flags; the
1288     <option>-f*</option> options described later on specify
1289     <emphasis>individual</emphasis> optimisations to be turned on/off;
1290     the <option>-m*</option> options specify
1291     <emphasis>machine-specific</emphasis> optimisations to be turned
1292     on/off.</para>
1293
1294     <sect2 id="optimise-pkgs">
1295       <title><option>-O*</option>: convenient &ldquo;packages&rdquo; of optimisation flags.</title>
1296
1297       <para>There are <emphasis>many</emphasis> options that affect
1298       the quality of code produced by GHC.  Most people only have a
1299       general goal, something like &ldquo;Compile quickly&rdquo; or
1300       &ldquo;Make my program run like greased lightning.&rdquo; The
1301       following &ldquo;packages&rdquo; of optimisations (or lack
1302       thereof) should suffice.</para>
1303
1304       <para>Note that higher optimisation levels cause more
1305       cross-module optimisation to be performed, which can have an
1306       impact on how much of your program needs to be recompiled when
1307       you change something.  This is one reason to stick to
1308       no-optimisation when developing code.</para>
1309
1310       <variablelist>
1311
1312         <varlistentry>
1313           <term>
1314             No <option>-O*</option>-type option specified:
1315             <indexterm><primary>-O* not specified</primary></indexterm>
1316           </term>
1317           <listitem>
1318             <para>This is taken to mean: &ldquo;Please compile
1319             quickly; I'm not over-bothered about compiled-code
1320             quality.&rdquo; So, for example: <command>ghc -c
1321             Foo.hs</command></para>
1322           </listitem>
1323         </varlistentry>
1324
1325         <varlistentry>
1326           <term>
1327             <option>-O0</option>:
1328             <indexterm><primary><option>-O0</option></primary></indexterm>
1329           </term>
1330           <listitem>
1331             <para>Means &ldquo;turn off all optimisation&rdquo;,
1332             reverting to the same settings as if no
1333             <option>-O</option> options had been specified.  Saying
1334             <option>-O0</option> can be useful if
1335             eg. <command>make</command> has inserted a
1336             <option>-O</option> on the command line already.</para>
1337           </listitem>
1338         </varlistentry>
1339
1340         <varlistentry>
1341           <term>
1342             <option>-O</option> or <option>-O1</option>:
1343             <indexterm><primary>-O option</primary></indexterm>
1344             <indexterm><primary>-O1 option</primary></indexterm>
1345             <indexterm><primary>optimise</primary><secondary>normally</secondary></indexterm>
1346           </term>
1347           <listitem>
1348             <para>Means: &ldquo;Generate good-quality code without
1349             taking too long about it.&rdquo; Thus, for example:
1350             <command>ghc -c -O Main.lhs</command></para>
1351           </listitem>
1352         </varlistentry>
1353
1354         <varlistentry>
1355           <term>
1356             <option>-O2</option>:
1357             <indexterm><primary>-O2 option</primary></indexterm>
1358             <indexterm><primary>optimise</primary><secondary>aggressively</secondary></indexterm>
1359           </term>
1360           <listitem>
1361             <para>Means: &ldquo;Apply every non-dangerous
1362             optimisation, even if it means significantly longer
1363             compile times.&rdquo;</para>
1364
1365             <para>The avoided &ldquo;dangerous&rdquo; optimisations
1366             are those that can make runtime or space
1367             <emphasis>worse</emphasis> if you're unlucky.  They are
1368             normally turned on or off individually.</para>
1369
1370             <para>At the moment, <option>-O2</option> is
1371             <emphasis>unlikely</emphasis> to produce better code than
1372             <option>-O</option>.</para>
1373           </listitem>
1374         </varlistentry>
1375
1376         <varlistentry>
1377           <term>
1378             <option>-Ofile &lt;file&gt;</option>:
1379             <indexterm><primary>-Ofile &lt;file&gt; option</primary></indexterm>
1380             <indexterm><primary>optimising, customised</primary></indexterm>
1381           </term>
1382           <listitem>
1383             <para>(NOTE: not supported since GHC 4.x.  Please ask if
1384             you're interested in this.)</para>
1385             
1386             <para>For those who need <emphasis>absolute</emphasis>
1387             control over <emphasis>exactly</emphasis> what options are
1388             used (e.g., compiler writers, sometimes :-), a list of
1389             options can be put in a file and then slurped in with
1390             <option>-Ofile</option>.</para>
1391
1392             <para>In that file, comments are of the
1393             <literal>&num;</literal>-to-end-of-line variety; blank
1394             lines and most whitespace is ignored.</para>
1395
1396             <para>Please ask if you are baffled and would like an
1397             example of <option>-Ofile</option>!</para>
1398           </listitem>
1399         </varlistentry>
1400       </variablelist>
1401
1402       <para>We don't use a <option>-O*</option> flag for day-to-day
1403       work.  We use <option>-O</option> to get respectable speed;
1404       e.g., when we want to measure something.  When we want to go for
1405       broke, we tend to use <option>-O2 -fvia-C</option> (and we go for
1406       lots of coffee breaks).</para>
1407
1408       <para>The easiest way to see what <option>-O</option> (etc.)
1409       &ldquo;really mean&rdquo; is to run with <option>-v</option>,
1410       then stand back in amazement.</para>
1411     </sect2>
1412
1413     <sect2 id="options-f">
1414       <title><option>-f*</option>: platform-independent flags</title>
1415
1416       <indexterm><primary>-f* options (GHC)</primary></indexterm>
1417       <indexterm><primary>-fno-* options (GHC)</primary></indexterm>
1418
1419       <para>These flags turn on and off individual optimisations.
1420       They are normally set via the <option>-O</option> options
1421       described above, and as such, you shouldn't need to set any of
1422       them explicitly (indeed, doing so could lead to unexpected
1423       results).  However, there are one or two that may be of
1424       interest:</para>
1425
1426       <variablelist>
1427         <varlistentry>
1428           <term><option>-fexcess-precision</option>:</term>
1429           <listitem>
1430             <indexterm><primary><option>-fexcess-precision</option></primary></indexterm>
1431             <para>When this option is given, intermediate floating
1432             point values can have a <emphasis>greater</emphasis>
1433             precision/range than the final type.  Generally this is a
1434             good thing, but some programs may rely on the exact
1435             precision/range of
1436             <literal>Float</literal>/<literal>Double</literal> values
1437             and should not use this option for their compilation.</para>
1438           </listitem>
1439         </varlistentry>
1440
1441         <varlistentry>
1442           <term><option>-fignore-asserts</option>:</term>
1443           <listitem>
1444             <indexterm><primary><option>-fignore-asserts</option></primary></indexterm>
1445             <para>Causes GHC to ignore uses of the function
1446             <literal>Exception.assert</literal> in source code (in
1447             other words, rewriting <literal>Exception.assert p
1448             e</literal> to <literal>e</literal> (see <xref
1449             linkend="assertions"/>).  This flag is turned on by
1450             <option>-O</option>.
1451             </para>
1452           </listitem>
1453         </varlistentry>
1454
1455         <varlistentry>
1456           <term>
1457             <option>-fno-cse</option>
1458             <indexterm><primary><option>-fno-cse</option></primary></indexterm>
1459           </term>
1460           <listitem>
1461             <para>Turns off the common-sub-expression elimination optimisation.
1462               Can be useful if you have some <literal>unsafePerformIO</literal>
1463             expressions that you don't want commoned-up.</para>
1464           </listitem>
1465         </varlistentry>
1466
1467         <varlistentry>
1468           <term>
1469             <option>-fno-strictness</option>
1470             <indexterm><primary><option>-fno-strictness</option></primary></indexterm>
1471           </term>
1472           <listitem>
1473             <para>Turns off the strictness analyser; sometimes it eats
1474             too many cycles.</para>
1475           </listitem>
1476         </varlistentry>
1477
1478         <varlistentry>
1479           <term>
1480             <option>-fno-full-laziness</option>
1481             <indexterm><primary><option>-fno-full-laziness</option></primary></indexterm>
1482           </term>
1483           <listitem>
1484             <para>Turns off the full laziness optimisation (also known as
1485               let-floating).  Full laziness increases sharing, which can lead
1486               to increased memory residency.</para>
1487
1488             <para>NOTE: GHC doesn't implement complete full-laziness.
1489             When optimisation in on, and
1490             <option>-fno-full-laziness</option> is not given, some
1491             transformations that increase sharing are performed, such
1492             as extracting repeated computations from a loop.  These
1493             are the same transformations that a fully lazy
1494             implementation would do, the difference is that GHC
1495             doesn't consistently apply full-laziness, so don't rely on
1496             it.</para>
1497           </listitem>
1498         </varlistentry>
1499
1500         <varlistentry>
1501           <term>
1502             <option>-fno-state-hack</option>
1503             <indexterm><primary><option>-fno-state-hack</option></primary></indexterm>
1504           </term>
1505           <listitem>
1506             <para>Turn off the "state hack" whereby any lambda with a
1507               <literal>State#</literal> token as argument is considered to be
1508               single-entry, hence it is considered OK to inline things inside
1509               it.  This can improve performance of IO and ST monad code, but it
1510             runs the risk of reducing sharing.</para> 
1511           </listitem>
1512         </varlistentry>
1513
1514         <varlistentry>
1515           <term>
1516             <option>-fno-state-hack</option>
1517             <indexterm><primary><option>-fno-state-hack</option></primary></indexterm>
1518           </term>
1519           <listitem>
1520             <para>Turn off the "state hack" whereby any lambda with a
1521               <literal>State#</literal> token as argument is considered to be
1522               single-entry, hence it is considered OK to inline things inside
1523               it.  This can improve performance of IO and ST monad code, but it
1524             runs the risk of reducing sharing.</para> 
1525           </listitem>
1526         </varlistentry>
1527
1528         <varlistentry>
1529           <term>
1530             <option>-fomit-interface-pragmas</option>
1531             <indexterm><primary><option>-fomit-interface-pragmas</option></primary></indexterm>
1532           </term>
1533           <listitem>
1534             <para>Tells GHC to omit all inessential information from the interface file
1535               generated for the module being compiled (say M).  This means that a module
1536               importing M will see only the <emphasis>types</emphasis> of the functions that M exports, but not
1537               their unfoldings, strictness info, etc.  Hence, for example,
1538               no function exported by M will be inlined
1539               into an importing module.  The benefit is that modules that import M will
1540               need to be recompiled less often (only when M's exports change their type,
1541               not when they change their implementation).
1542               </para>
1543           </listitem>
1544         </varlistentry>
1545
1546         <varlistentry>
1547           <term>
1548             <option>-fignore-interface-pragmas</option>
1549             <indexterm><primary><option>-fignore-interface-pragmas</option></primary></indexterm>
1550           </term>
1551           <listitem>
1552             <para>Tells GHC to ignore all inessential information when reading interface files.
1553             That is, even if <filename>M.hi</filename> contains unfolding or strictness information
1554             for a function, GHC will ignore that information.</para>
1555           </listitem>
1556         </varlistentry>
1557
1558         <varlistentry>
1559           <term>
1560             <option>-funbox-strict-fields</option>:
1561             <indexterm><primary><option>-funbox-strict-fields</option></primary></indexterm>
1562             <indexterm><primary>strict constructor fields</primary></indexterm>
1563             <indexterm><primary>constructor fields, strict</primary></indexterm>
1564           </term>
1565           <listitem>
1566             <para>This option causes all constructor fields which are
1567             marked strict (i.e. &ldquo;!&rdquo;) to be unboxed or
1568             unpacked if possible.  It is equivalent to adding an
1569             <literal>UNPACK</literal> pragma to every strict
1570             constructor field (see <xref
1571             linkend="unpack-pragma"/>).</para>
1572
1573             <para>This option is a bit of a sledgehammer: it might
1574             sometimes make things worse.  Selectively unboxing fields
1575             by using <literal>UNPACK</literal> pragmas might be
1576             better.</para>
1577           </listitem>
1578         </varlistentry>
1579
1580         <varlistentry>
1581           <term>
1582             <option>-funfolding-update-in-place=<replaceable>n</replaceable></option>
1583             <indexterm><primary><option>-funfolding-update-in-place</option></primary></indexterm>
1584           </term>
1585           <listitem>
1586             <para>Switches on an experimental "optimisation".
1587             Switching it on makes the compiler a little keener to
1588             inline a function that returns a constructor, if the
1589             context is that of a thunk.
1590 <programlisting>
1591    x = plusInt a b
1592 </programlisting>
1593             If we inlined plusInt we might get an opportunity to use
1594             update-in-place for the thunk 'x'.</para>
1595           </listitem>
1596         </varlistentry>
1597
1598         <varlistentry>
1599           <term>
1600             <option>-funfolding-creation-threshold=<replaceable>n</replaceable></option>:
1601             <indexterm><primary><option>-funfolding-creation-threshold</option></primary></indexterm>
1602             <indexterm><primary>inlining, controlling</primary></indexterm>
1603             <indexterm><primary>unfolding, controlling</primary></indexterm>
1604           </term>
1605           <listitem>
1606             <para>(Default: 45) Governs the maximum size that GHC will 
1607             allow a function unfolding to be.   (An unfolding has a
1608             &ldquo;size&rdquo; that reflects the cost in terms of
1609             &ldquo;code bloat&rdquo; of expanding that unfolding at
1610             at a call site. A bigger function would be assigned a
1611             bigger cost.) </para>
1612
1613             <para> Consequences: (a) nothing larger than this will be
1614             inlined (unless it has an INLINE pragma); (b) nothing
1615             larger than this will be spewed into an interface
1616             file. </para>
1617
1618
1619             <para> Increasing this figure is more likely to result in longer
1620             compile times than faster code.  The next option is more
1621             useful:</para>
1622           </listitem>
1623         </varlistentry>
1624
1625         <varlistentry>
1626           <term><option>-funfolding-use-threshold=<replaceable>n</replaceable></option></term>
1627           <listitem>
1628             <indexterm><primary><option>-funfolding-use-threshold</option></primary></indexterm>
1629             <indexterm><primary>inlining, controlling</primary></indexterm>
1630             <indexterm><primary>unfolding, controlling</primary></indexterm>
1631
1632             <para>(Default: 8) This is the magic cut-off figure for
1633             unfolding: below this size, a function definition will be
1634             unfolded at the call-site, any bigger and it won't.  The
1635             size computed for a function depends on two things: the
1636             actual size of the expression minus any discounts that
1637             apply (see <option>-funfolding-con-discount</option>).</para>
1638           </listitem>
1639         </varlistentry>
1640       </variablelist>
1641
1642     </sect2>
1643     
1644   </sect1>
1645   
1646   &phases;  
1647   
1648   <sect1 id="using-concurrent">
1649     <title>Using Concurrent Haskell</title>
1650     <indexterm><primary>Concurrent Haskell</primary><secondary>using</secondary></indexterm>
1651
1652     <para>GHC supports Concurrent Haskell by default, without requiring a
1653       special option or libraries compiled in a certain way.  To get access to
1654       the support libraries for Concurrent Haskell, just import
1655       <ulink
1656         url="../libraries/base/Control-Concurrent.html"><literal>Control.Concurrent</literal></ulink>.  More information on Concurrent Haskell is provided in the documentation for that module.</para>
1657
1658     <para>The following RTS option(s) affect the behaviour of Concurrent
1659       Haskell programs:<indexterm><primary>RTS options, concurrent</primary></indexterm></para>
1660
1661     <variablelist>
1662       <varlistentry>
1663         <term><option>-C<replaceable>s</replaceable></option></term>
1664         <listitem>
1665           <para><indexterm><primary><option>-C<replaceable>s</replaceable></option></primary><secondary>RTS option</secondary></indexterm>
1666             Sets the context switch interval to <replaceable>s</replaceable>
1667             seconds.  A context switch will occur at the next heap block
1668             allocation after the timer expires (a heap block allocation occurs
1669             every 4k of allocation).  With <option>-C0</option> or
1670             <option>-C</option>, context switches will occur as often as
1671             possible (at every heap block allocation).  By default, context
1672             switches occur every 20ms.</para>
1673         </listitem>
1674       </varlistentry>
1675     </variablelist>
1676   </sect1>
1677
1678   <sect1 id="using-smp">
1679     <title>Using SMP parallelism</title>
1680     <indexterm><primary>parallelism</primary>
1681     </indexterm>
1682     <indexterm><primary>SMP</primary>
1683     </indexterm>
1684
1685     <para>GHC supports running Haskell programs in parallel on an SMP
1686       (symmetric multiprocessor).</para>
1687
1688     <para>There's a fine distinction between
1689       <emphasis>concurrency</emphasis> and <emphasis>parallelism</emphasis>:
1690       parallelism is all about making your program run
1691       <emphasis>faster</emphasis> by making use of multiple processors
1692       simultaneously.  Concurrency, on the other hand, is a means of
1693       abstraction: it is a convenient way to structure a program that must
1694       respond to multiple asynchronous events.</para>
1695
1696     <para>However, the two terms are certainly related.  By making use of
1697       multiple CPUs it is possible to run concurrent threads in parallel,
1698       and this is exactly what GHC's SMP parallelism support does.  But it
1699       is also possible to obtain performance improvements with parallelism
1700       on programs that do not use concurrency.  This section describes how to
1701       use GHC to compile and run parallel programs, in <xref
1702         linkend="lang-parallel" /> we desribe the language features that affect
1703     parallelism.</para>
1704     
1705     <sect2 id="parallel-options">
1706       <title>Options to enable SMP parallelism</title>
1707
1708       <para>In order to make use of multiple CPUs, your program must be
1709         linked with the <option>-threaded</option> option (see <xref
1710           linkend="options-linker" />).  Then, to run a program on multiple
1711         CPUs, use the RTS <option>-N</option> option:</para>
1712       
1713       <variablelist>
1714         <varlistentry>
1715           <term><option>-N<replaceable>x</replaceable></option></term>
1716           <listitem>
1717             <para><indexterm><primary><option>-N<replaceable>x</replaceable></option></primary><secondary>RTS option</secondary></indexterm>
1718               Use <replaceable>x</replaceable> simultaneous threads when
1719               running the program.  Normally <replaceable>x</replaceable>
1720               should be chosen to match the number of CPU cores on the machine.
1721               There is no means (currently) by which this value may vary after
1722               the program has started.</para> 
1723             
1724             <para>For example, on a dual-core machine we would probably use
1725               <literal>+RTS -N2 -RTS</literal>.</para>
1726             
1727             <para>Whether hyperthreading cores should be counted or not is an
1728               open question; please feel free to experiment and let us know what
1729               results you find.</para>
1730           </listitem>
1731         </varlistentry>
1732       </variablelist>
1733     </sect2>
1734       
1735     <sect2>
1736       <title>Hints for using SMP parallelism</title>
1737
1738       <para>Add the <literal>-sstderr</literal> RTS option when
1739         running the program to see timing stats, which will help to tell you
1740         whether your program got faster by using more CPUs or not.  If the user
1741         time is greater than
1742         the elapsed time, then the program used more than one CPU.  You should
1743         also run the program without <literal>-N</literal> for comparison.</para>
1744
1745       <para>GHC's parallelism support is new and experimental.  It may make your
1746         program go faster, or it might slow it down - either way, we'd be
1747         interested to hear from you.</para>
1748       
1749       <para>One significant limitation with the current implementation is that
1750         the garbage collector is still single-threaded, and all execution must
1751         stop when GC takes place.  This can be a significant bottleneck in a
1752         parallel program, especially if your program does a lot of GC.  If this
1753         happens to you, then try reducing the cost of GC by tweaking the GC
1754         settings (<xref linkend="rts-options-gc" />): enlarging the heap or the
1755         allocation area size is a good start.</para>
1756     </sect2>
1757   </sect1>
1758
1759   <sect1 id="options-platform">
1760     <title>Platform-specific Flags</title>
1761
1762     <indexterm><primary>-m* options</primary></indexterm>
1763     <indexterm><primary>platform-specific options</primary></indexterm>
1764     <indexterm><primary>machine-specific options</primary></indexterm>
1765
1766     <para>Some flags only make sense for particular target
1767     platforms.</para>
1768
1769     <variablelist>
1770
1771       <varlistentry>
1772         <term><option>-monly-[32]-regs</option>:</term>
1773         <listitem>
1774           <para>(iX86 machines)<indexterm><primary>-monly-N-regs
1775           option (iX86 only)</primary></indexterm> GHC tries to
1776           &ldquo;steal&rdquo; four registers from GCC, for performance
1777           reasons; it almost always works.  However, when GCC is
1778           compiling some modules with four stolen registers, it will
1779           crash, probably saying:
1780
1781 <screen>
1782 Foo.hc:533: fixed or forbidden register was spilled.
1783 This may be due to a compiler bug or to impossible asm
1784 statements or clauses.
1785 </screen>
1786
1787           Just give some registers back with
1788           <option>-monly-N-regs</option>.  Try `3' first, then `2'.
1789           If `2' doesn't work, please report the bug to us.</para>
1790         </listitem>
1791       </varlistentry>
1792     </variablelist>
1793
1794   </sect1>
1795
1796 &runtime;
1797
1798 <sect1 id="ext-core">
1799   <title>Generating and compiling External Core Files</title>
1800
1801   <indexterm><primary>intermediate code generation</primary></indexterm>
1802
1803   <para>GHC can dump its optimized intermediate code (said to be in &ldquo;Core&rdquo; format) 
1804   to a file as a side-effect of compilation. Core files, which are given the suffix
1805   <filename>.hcr</filename>, can be read and processed by non-GHC back-end
1806   tools.  The Core format is formally described in <ulink url="http://www.haskell.org/ghc/docs/papers/core.ps.gz">
1807   <citetitle>An External Representation for the GHC Core Language</citetitle></ulink>, 
1808   and sample tools (in Haskell)
1809   for manipulating Core files are available in the GHC source distribution 
1810   directory <literal>/fptools/ghc/utils/ext-core</literal>.  
1811   Note that the format of <literal>.hcr</literal> 
1812   files is <emphasis>different</emphasis> (though similar) to the Core output format generated 
1813   for debugging purposes (<xref linkend="options-debugging"/>).</para>
1814
1815   <para>The Core format natively supports notes which you can add to
1816   your source code using the <literal>CORE</literal> pragma (see <xref
1817   linkend="pragmas"/>).</para>
1818
1819     <variablelist>
1820
1821         <varlistentry>
1822           <term>
1823             <option>-fext-core</option>
1824             <indexterm><primary><option>-fext-core</option></primary></indexterm>
1825           </term>
1826           <listitem>
1827             <para>Generate <literal>.hcr</literal> files.</para>
1828           </listitem>
1829         </varlistentry>
1830
1831     </variablelist>
1832
1833 <para>GHC can also read in External Core files as source; just give the <literal>.hcr</literal> file on
1834 the command line, instead of the <literal>.hs</literal> or <literal>.lhs</literal> Haskell source.
1835 A current infelicity is that you need to give the <literal>-fglasgow-exts</literal> flag too, because
1836 ordinary Haskell 98, when translated to External Core, uses things like rank-2 types.</para>
1837 </sect1>
1838
1839 &debug;
1840 &flags;
1841
1842 </chapter>
1843
1844 <!-- Emacs stuff:
1845      ;;; Local Variables: ***
1846      ;;; mode: xml ***
1847      ;;; sgml-parent-document: ("users_guide.xml" "book" "chapter") ***
1848      ;;; End: ***
1849  -->