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