Remove note that -E behaviour has changed (6.0 has the same note)
[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-unused-matches</option>,
823           <option>-fwarn-unused-imports</option>, and
824           <option>-fwarn-unused-binds</option>.</para>
825         </listitem>
826       </varlistentry>
827
828       <varlistentry>
829         <term><option>-w</option>:</term>
830         <listitem>
831           <indexterm><primary><option>-w</option></primary></indexterm>
832           <para>Turns off all warnings, including the standard ones.</para>
833         </listitem>
834       </varlistentry>
835
836       <varlistentry>
837         <term><option>-Wall</option>:</term>
838         <listitem>
839           <indexterm><primary><option>-Wall</option></primary></indexterm>
840           <para>Turns on all warning options that indicate potentially
841           suspicious code.  The warnings that are
842           <emphasis>not</emphasis> enabled by <option>-Wall</option>
843           are:</para>
844           <itemizedlist>
845             <listitem><option>-fwarn-simple-patterns</option></listitem>
846             <listitem><option>-fwarn-tabs</option></listitem>
847             <listitem><option>-fwarn-incomplete-record-updates</option></listitem>
848             <listitem><option>-fwarn-monomorphism-restriction</option></listitem>
849             <listitem><option>-fwarn-implicit-prelude</option></listitem>
850           </itemizedlist>
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         </listitem>
882       </varlistentry>
883
884       <varlistentry>
885         <term><option>-fwarn-duplicate-exports</option>:</term>
886         <listitem>
887           <indexterm><primary><option>-fwarn-duplicate-exports</option></primary></indexterm>
888           <indexterm><primary>duplicate exports, warning</primary></indexterm>
889           <indexterm><primary>export lists, duplicates</primary></indexterm>
890
891           <para>Have the compiler warn about duplicate entries in
892           export lists. This is useful information if you maintain
893           large export lists, and want to avoid the continued export
894           of a definition after you've deleted (one) mention of it in
895           the export list.</para>
896
897           <para>This option is on by default.</para>
898         </listitem>
899       </varlistentry>
900
901       <varlistentry>
902         <term><option>-fwarn-hi-shadowing</option>:</term>
903         <listitem>
904           <indexterm><primary><option>-fwarn-hi-shadowing</option></primary></indexterm>
905           <indexterm><primary>shadowing</primary>
906             <secondary>interface files</secondary></indexterm>
907
908           <para>Causes the compiler to emit a warning when a module or
909           interface file in the current directory is shadowing one
910           with the same module name in a library or other
911           directory.</para>
912         </listitem>
913       </varlistentry>
914
915       <varlistentry>
916         <term><option>-fwarn-implicit-prelude</option>:</term>
917         <listitem>
918           <indexterm><primary><option>-fwarn-implicit-prelude</option></primary></indexterm>
919           <indexterm><primary>implicit prelude, warning</primary></indexterm>
920           <para>Have the compiler warn if the Prelude is implicitly
921           imported.  This happens unless either the Prelude module is
922           explicitly imported with an <literal>import ... Prelude ...</literal>
923           line, or this implicit import is disabled (either by
924           <option>-fno-implicit-prelude</option> or a
925           <literal>LANGUAGE NoImplicitPrelude</literal> pragma).</para>
926
927           <para>Note that no warning is given for syntax that implicitly
928           refers to the Prelude, even if <option>-fno-implicit-prelude</option>
929           would change whether it refers to the Prelude.
930           For example, no warning is given when
931           <literal>368</literal> means
932           <literal>Prelude.fromInteger (368::Prelude.Integer)</literal>
933           (where <literal>Prelude</literal> refers to the actual Prelude module,
934           regardless of the imports of the module being compiled).</para>
935
936           <para>This warning is off by default.</para>
937         </listitem>
938       </varlistentry>
939
940       <varlistentry>
941         <term><option>-fwarn-incomplete-patterns</option>:</term>
942         <listitem>
943           <indexterm><primary><option>-fwarn-incomplete-patterns</option></primary></indexterm>
944           <indexterm><primary>incomplete patterns, warning</primary></indexterm>
945           <indexterm><primary>patterns, incomplete</primary></indexterm>
946
947           <para>Similarly for incomplete patterns, the function
948           <function>g</function> below will fail when applied to
949           non-empty lists, so the compiler will emit a warning about
950           this when <option>-fwarn-incomplete-patterns</option> is
951           enabled.</para>
952
953 <programlisting>
954 g [] = 2
955 </programlisting>
956
957           <para>This option isn't enabled be default because it can be
958           a bit noisy, and it doesn't always indicate a bug in the
959           program.  However, it's generally considered good practice
960           to cover all the cases in your functions.</para>
961         </listitem>
962       </varlistentry>
963
964       <varlistentry>
965         <term><option>-fwarn-incomplete-record-updates</option>:</term>
966         <listitem>
967           <indexterm><primary><option>-fwarn-incomplete-record-updates</option></primary></indexterm>
968           <indexterm><primary>incomplete record updates, warning</primary></indexterm>
969           <indexterm><primary>record updates, incomplete</primary></indexterm>
970
971           <para>The function
972           <function>f</function> below will fail when applied to
973           <literal>Bar</literal>, so the compiler will emit a warning about
974           this when <option>-fwarn-incomplete-record-updates</option> is
975           enabled.</para>
976
977 <programlisting>
978 data Foo = Foo { x :: Int }
979          | Bar
980
981 f :: Foo -> Foo
982 f foo = foo { x = 6 }
983 </programlisting>
984
985           <para>This option isn't enabled be default because it can be
986           very noisy, and it often doesn't indicate a bug in the
987           program.</para>
988         </listitem>
989       </varlistentry>
990
991       <varlistentry>
992         <term>
993           <option>-fwarn-missing-fields</option>:
994           <indexterm><primary><option>-fwarn-missing-fields</option></primary></indexterm>
995           <indexterm><primary>missing fields, warning</primary></indexterm>
996           <indexterm><primary>fields, missing</primary></indexterm>
997         </term>
998         <listitem>
999
1000           <para>This option is on by default, and warns you whenever
1001           the construction of a labelled field constructor isn't
1002           complete, missing initializers for one or more fields. While
1003           not an error (the missing fields are initialised with
1004           bottoms), it is often an indication of a programmer error.</para>
1005         </listitem>
1006       </varlistentry>
1007
1008       <varlistentry>
1009         <term><option>-fwarn-missing-methods</option>:</term>
1010         <listitem>
1011           <indexterm><primary><option>-fwarn-missing-methods</option></primary></indexterm>
1012           <indexterm><primary>missing methods, warning</primary></indexterm>
1013           <indexterm><primary>methods, missing</primary></indexterm>
1014
1015           <para>This option is on by default, and warns you whenever
1016           an instance declaration is missing one or more methods, and
1017           the corresponding class declaration has no default
1018           declaration for them.</para>
1019           <para>The warning is suppressed if the method name
1020           begins with an underscore.  Here's an example where this is useful:
1021             <programlisting>
1022               class C a where
1023                 _simpleFn :: a -> String
1024                 complexFn :: a -> a -> String
1025                 complexFn x y = ... _simpleFn ...
1026               </programlisting>
1027             The idea is that: (a) users of the class will only call <literal>complexFn</literal>; 
1028             never <literal>_simpleFn</literal>; and (b)
1029             instance declarations can define either <literal>complexFn</literal> or <literal>_simpleFn</literal>.
1030             </para>
1031         </listitem>
1032       </varlistentry>
1033
1034       <varlistentry>
1035         <term><option>-fwarn-missing-signatures</option>:</term>
1036         <listitem>
1037           <indexterm><primary><option>-fwarn-missing-signatures</option></primary></indexterm>
1038           <indexterm><primary>type signatures, missing</primary></indexterm>
1039
1040           <para>If you would like GHC to check that every top-level
1041           function/value has a type signature, use the
1042           <option>-fwarn-missing-signatures</option> option.  As part of
1043             the warning GHC also reports the inferred type.  The
1044           option is off by default.</para>
1045         </listitem>
1046       </varlistentry>
1047
1048       <varlistentry>
1049         <term><option>-fwarn-name-shadowing</option>:</term>
1050         <listitem>
1051           <indexterm><primary><option>-fwarn-name-shadowing</option></primary></indexterm>
1052           <indexterm><primary>shadowing, warning</primary></indexterm>
1053           
1054           <para>This option causes a warning to be emitted whenever an
1055           inner-scope value has the same name as an outer-scope value,
1056           i.e. the inner value shadows the outer one.  This can catch
1057           typographical errors that turn into hard-to-find bugs, e.g.,
1058           in the inadvertent cyclic definition <literal>let x = ... x
1059           ... in</literal>.</para>
1060
1061           <para>Consequently, this option
1062           <emphasis>will</emphasis> complain about cyclic recursive
1063           definitions.</para>
1064         </listitem>
1065       </varlistentry>
1066
1067       <varlistentry>
1068         <term><option>-fwarn-orphans</option>:</term>
1069         <listitem>
1070           <indexterm><primary><option>-fwarn-orphans</option></primary></indexterm>
1071           <indexterm><primary>orphan instances, warning</primary></indexterm>
1072           <indexterm><primary>orphan rules, warning</primary></indexterm>
1073           
1074           <para>This option causes a warning to be emitted whenever the 
1075             module contains an "orphan" instance declaration or rewrite rule.
1076             An instance declartion is an orphan if it appears in a module in
1077             which neither the class nor the type being instanced are declared
1078             in the same module.  A rule is an orphan if it is a rule for a
1079             function declared in another module.  A module containing any
1080           orphans is called an orphan module.</para>
1081           <para>The trouble with orphans is that GHC must pro-actively read the interface
1082             files for all orphan modules, just in case their instances or rules
1083             play a role, whether or not the module's interface would otherwise 
1084             be of any use.  Other things being equal, avoid orphan modules.</para>
1085         </listitem>
1086       </varlistentry>
1087
1088       <varlistentry>
1089         <term>
1090           <option>-fwarn-overlapping-patterns</option>:
1091           <indexterm><primary><option>-fwarn-overlapping-patterns</option></primary></indexterm>
1092           <indexterm><primary>overlapping patterns, warning</primary></indexterm>
1093           <indexterm><primary>patterns, overlapping</primary></indexterm>
1094         </term>
1095         <listitem>
1096           <para>By default, the compiler will warn you if a set of
1097           patterns are overlapping, i.e.,</para>
1098
1099 <programlisting>
1100 f :: String -&#62; Int
1101 f []     = 0
1102 f (_:xs) = 1
1103 f "2"    = 2
1104 </programlisting>
1105
1106           <para>where the last pattern match in <function>f</function>
1107           won't ever be reached, as the second pattern overlaps
1108           it. More often than not, redundant patterns is a programmer
1109           mistake/error, so this option is enabled by default.</para>
1110         </listitem>
1111       </varlistentry>
1112
1113       <varlistentry>
1114         <term><option>-fwarn-simple-patterns</option>:</term>
1115         <listitem>
1116           <indexterm><primary><option>-fwarn-simple-patterns</option></primary>
1117           </indexterm>
1118           <para>Causes the compiler to warn about lambda-bound
1119           patterns that can fail, eg. <literal>\(x:xs)->...</literal>.
1120           Normally, these aren't treated as incomplete patterns by
1121           <option>-fwarn-incomplete-patterns</option>.</para>
1122           <para>``Lambda-bound patterns'' includes all places where there is a single pattern,
1123             including list comprehensions and do-notation.  In these cases, a pattern-match 
1124             failure is quite legitimate, and triggers filtering (list comprehensions) or
1125             the monad <literal>fail</literal> operation (monads). For example:
1126             <programlisting>
1127               f :: [Maybe a] -> [a]
1128               f xs = [y | Just y &lt;- xs]
1129               </programlisting>
1130             Switching on <option>-fwarn-simple-patterns</option> will elicit warnings about
1131             these probably-innocent cases, which is why the flag is off by default. </para>
1132           <para> The <literal>deriving( Read )</literal> mechanism produces monadic code with
1133             pattern matches, so you will also get misleading warnings about the compiler-generated
1134             code.  (This is arguably a Bad Thing, but it's awkward to fix.)</para>
1135
1136         </listitem>
1137       </varlistentry>
1138
1139       <varlistentry>
1140         <term><option>-fwarn-tabs</option>:</term>
1141         <listitem>
1142           <indexterm><primary><option>-fwarn-tabs</option></primary></indexterm>
1143           <indexterm><primary>tabs, warning</primary></indexterm>
1144           <para>Have the compiler warn if there are tabs in your source
1145           file.</para>
1146
1147           <para>This warning is off by default.</para>
1148         </listitem>
1149       </varlistentry>
1150
1151       <varlistentry>
1152         <term><option>-fwarn-type-defaults</option>:</term>
1153         <listitem>
1154           <indexterm><primary><option>-fwarn-type-defaults</option></primary></indexterm>
1155           <indexterm><primary>defaulting mechanism, warning</primary></indexterm>
1156           <para>Have the compiler warn/inform you where in your source
1157           the Haskell defaulting mechanism for numeric types kicks
1158           in. This is useful information when converting code from a
1159           context that assumed one default into one with another,
1160           e.g., the `default default' for Haskell 1.4 caused the
1161           otherwise unconstrained value <constant>1</constant> to be
1162           given the type <literal>Int</literal>, whereas Haskell 98
1163           defaults it to <literal>Integer</literal>.  This may lead to
1164           differences in performance and behaviour, hence the
1165           usefulness of being non-silent about this.</para>
1166
1167           <para>This warning is off by default.</para>
1168         </listitem>
1169       </varlistentry>
1170
1171       <varlistentry>
1172         <term><option>-fwarn-monomorphism-restriction</option>:</term>
1173         <listitem>
1174           <indexterm><primary><option>-fwarn-monomorphism-restriction</option></primary></indexterm>
1175           <indexterm><primary>monomorphism restriction, warning</primary></indexterm>
1176           <para>Have the compiler warn/inform you where in your source
1177           the Haskell Monomorphism Restriction is applied.  If applied silently
1178           the MR can give rise to unexpected behaviour, so it can be helpful
1179           to have an explicit warning that it is being applied.</para>
1180
1181           <para>This warning is off by default.</para>
1182         </listitem>
1183       </varlistentry>
1184
1185       <varlistentry>
1186         <term><option>-fwarn-unused-binds</option>:</term>
1187         <listitem>
1188           <indexterm><primary><option>-fwarn-unused-binds</option></primary></indexterm>
1189           <indexterm><primary>unused binds, warning</primary></indexterm>
1190           <indexterm><primary>binds, unused</primary></indexterm>
1191           <para>Report any function definitions (and local bindings)
1192           which are unused.  For top-level functions, the warning is
1193           only given if the binding is not exported.</para>
1194           <para>A definition is regarded as "used" if (a) it is exported, or (b) it is
1195             mentioned in the right hand side of another definition that is used, or (c) the 
1196             function it defines begins with an underscore.  The last case provides a 
1197             way to suppress unused-binding warnings selectively.  </para>
1198           <para> Notice that a variable
1199             is reported as unused even if it appears in the right-hand side of another
1200             unused binding. </para>
1201         </listitem>
1202       </varlistentry>
1203
1204       <varlistentry>
1205         <term><option>-fwarn-unused-imports</option>:</term>
1206         <listitem>
1207           <indexterm><primary><option>-fwarn-unused-imports</option></primary></indexterm>
1208           <indexterm><primary>unused imports, warning</primary></indexterm>
1209           <indexterm><primary>imports, unused</primary></indexterm>
1210
1211           <para>Report any modules that are explicitly imported but
1212           never used.  However, the form <literal>import M()</literal> is
1213           never reported as an unused import, because it is a useful idiom
1214           for importing instance declarations, which are anonymous in Haskell.</para>
1215         </listitem>
1216       </varlistentry>
1217
1218       <varlistentry>
1219         <term><option>-fwarn-unused-matches</option>:</term>
1220         <listitem>
1221           <indexterm><primary><option>-fwarn-unused-matches</option></primary></indexterm>
1222           <indexterm><primary>unused matches, warning</primary></indexterm>
1223           <indexterm><primary>matches, unused</primary></indexterm>
1224
1225           <para>Report all unused variables which arise from pattern
1226           matches, including patterns consisting of a single variable.
1227           For instance <literal>f x y = []</literal> would report
1228           <varname>x</varname> and <varname>y</varname> as unused.  The
1229           warning is suppressed if the variable name begins with an underscore, thus:
1230             <programlisting>
1231                f _x = True
1232             </programlisting>
1233           </para>
1234         </listitem>
1235       </varlistentry>
1236
1237     </variablelist>
1238
1239     <para>If you're feeling really paranoid, the
1240     <option>-dcore-lint</option>
1241     option<indexterm><primary><option>-dcore-lint</option></primary></indexterm>
1242     is a good choice.  It turns on heavyweight intra-pass
1243     sanity-checking within GHC.  (It checks GHC's sanity, not
1244     yours.)</para>
1245
1246   </sect1>
1247
1248   &packages;
1249
1250   <sect1 id="options-optimise">
1251     <title>Optimisation (code improvement)</title>
1252
1253     <indexterm><primary>optimisation</primary></indexterm>
1254     <indexterm><primary>improvement, code</primary></indexterm>
1255
1256     <para>The <option>-O*</option> options specify convenient
1257     &ldquo;packages&rdquo; of optimisation flags; the
1258     <option>-f*</option> options described later on specify
1259     <emphasis>individual</emphasis> optimisations to be turned on/off;
1260     the <option>-m*</option> options specify
1261     <emphasis>machine-specific</emphasis> optimisations to be turned
1262     on/off.</para>
1263
1264     <sect2 id="optimise-pkgs">
1265       <title><option>-O*</option>: convenient &ldquo;packages&rdquo; of optimisation flags.</title>
1266
1267       <para>There are <emphasis>many</emphasis> options that affect
1268       the quality of code produced by GHC.  Most people only have a
1269       general goal, something like &ldquo;Compile quickly&rdquo; or
1270       &ldquo;Make my program run like greased lightning.&rdquo; The
1271       following &ldquo;packages&rdquo; of optimisations (or lack
1272       thereof) should suffice.</para>
1273
1274       <para>Note that higher optimisation levels cause more
1275       cross-module optimisation to be performed, which can have an
1276       impact on how much of your program needs to be recompiled when
1277       you change something.  This is one reason to stick to
1278       no-optimisation when developing code.</para>
1279
1280       <variablelist>
1281
1282         <varlistentry>
1283           <term>
1284             No <option>-O*</option>-type option specified:
1285             <indexterm><primary>-O* not specified</primary></indexterm>
1286           </term>
1287           <listitem>
1288             <para>This is taken to mean: &ldquo;Please compile
1289             quickly; I'm not over-bothered about compiled-code
1290             quality.&rdquo; So, for example: <command>ghc -c
1291             Foo.hs</command></para>
1292           </listitem>
1293         </varlistentry>
1294
1295         <varlistentry>
1296           <term>
1297             <option>-O0</option>:
1298             <indexterm><primary><option>-O0</option></primary></indexterm>
1299           </term>
1300           <listitem>
1301             <para>Means &ldquo;turn off all optimisation&rdquo;,
1302             reverting to the same settings as if no
1303             <option>-O</option> options had been specified.  Saying
1304             <option>-O0</option> can be useful if
1305             eg. <command>make</command> has inserted a
1306             <option>-O</option> on the command line already.</para>
1307           </listitem>
1308         </varlistentry>
1309
1310         <varlistentry>
1311           <term>
1312             <option>-O</option> or <option>-O1</option>:
1313             <indexterm><primary>-O option</primary></indexterm>
1314             <indexterm><primary>-O1 option</primary></indexterm>
1315             <indexterm><primary>optimise</primary><secondary>normally</secondary></indexterm>
1316           </term>
1317           <listitem>
1318             <para>Means: &ldquo;Generate good-quality code without
1319             taking too long about it.&rdquo; Thus, for example:
1320             <command>ghc -c -O Main.lhs</command></para>
1321           </listitem>
1322         </varlistentry>
1323
1324         <varlistentry>
1325           <term>
1326             <option>-O2</option>:
1327             <indexterm><primary>-O2 option</primary></indexterm>
1328             <indexterm><primary>optimise</primary><secondary>aggressively</secondary></indexterm>
1329           </term>
1330           <listitem>
1331             <para>Means: &ldquo;Apply every non-dangerous
1332             optimisation, even if it means significantly longer
1333             compile times.&rdquo;</para>
1334
1335             <para>The avoided &ldquo;dangerous&rdquo; optimisations
1336             are those that can make runtime or space
1337             <emphasis>worse</emphasis> if you're unlucky.  They are
1338             normally turned on or off individually.</para>
1339
1340             <para>At the moment, <option>-O2</option> is
1341             <emphasis>unlikely</emphasis> to produce better code than
1342             <option>-O</option>.</para>
1343           </listitem>
1344         </varlistentry>
1345
1346         <varlistentry>
1347           <term>
1348             <option>-Ofile &lt;file&gt;</option>:
1349             <indexterm><primary>-Ofile &lt;file&gt; option</primary></indexterm>
1350             <indexterm><primary>optimising, customised</primary></indexterm>
1351           </term>
1352           <listitem>
1353             <para>(NOTE: not supported since GHC 4.x.  Please ask if
1354             you're interested in this.)</para>
1355             
1356             <para>For those who need <emphasis>absolute</emphasis>
1357             control over <emphasis>exactly</emphasis> what options are
1358             used (e.g., compiler writers, sometimes :-), a list of
1359             options can be put in a file and then slurped in with
1360             <option>-Ofile</option>.</para>
1361
1362             <para>In that file, comments are of the
1363             <literal>&num;</literal>-to-end-of-line variety; blank
1364             lines and most whitespace is ignored.</para>
1365
1366             <para>Please ask if you are baffled and would like an
1367             example of <option>-Ofile</option>!</para>
1368           </listitem>
1369         </varlistentry>
1370       </variablelist>
1371
1372       <para>We don't use a <option>-O*</option> flag for day-to-day
1373       work.  We use <option>-O</option> to get respectable speed;
1374       e.g., when we want to measure something.  When we want to go for
1375       broke, we tend to use <option>-O2 -fvia-C</option> (and we go for
1376       lots of coffee breaks).</para>
1377
1378       <para>The easiest way to see what <option>-O</option> (etc.)
1379       &ldquo;really mean&rdquo; is to run with <option>-v</option>,
1380       then stand back in amazement.</para>
1381     </sect2>
1382
1383     <sect2 id="options-f">
1384       <title><option>-f*</option>: platform-independent flags</title>
1385
1386       <indexterm><primary>-f* options (GHC)</primary></indexterm>
1387       <indexterm><primary>-fno-* options (GHC)</primary></indexterm>
1388
1389       <para>These flags turn on and off individual optimisations.
1390       They are normally set via the <option>-O</option> options
1391       described above, and as such, you shouldn't need to set any of
1392       them explicitly (indeed, doing so could lead to unexpected
1393       results).  However, there are one or two that may be of
1394       interest:</para>
1395
1396       <variablelist>
1397         <varlistentry>
1398           <term><option>-fexcess-precision</option>:</term>
1399           <listitem>
1400             <indexterm><primary><option>-fexcess-precision</option></primary></indexterm>
1401             <para>When this option is given, intermediate floating
1402             point values can have a <emphasis>greater</emphasis>
1403             precision/range than the final type.  Generally this is a
1404             good thing, but some programs may rely on the exact
1405             precision/range of
1406             <literal>Float</literal>/<literal>Double</literal> values
1407             and should not use this option for their compilation.</para>
1408           </listitem>
1409         </varlistentry>
1410
1411         <varlistentry>
1412           <term><option>-fignore-asserts</option>:</term>
1413           <listitem>
1414             <indexterm><primary><option>-fignore-asserts</option></primary></indexterm>
1415             <para>Causes GHC to ignore uses of the function
1416             <literal>Exception.assert</literal> in source code (in
1417             other words, rewriting <literal>Exception.assert p
1418             e</literal> to <literal>e</literal> (see <xref
1419             linkend="assertions"/>).  This flag is turned on by
1420             <option>-O</option>.
1421             </para>
1422           </listitem>
1423         </varlistentry>
1424
1425         <varlistentry>
1426           <term>
1427             <option>-fno-cse</option>
1428             <indexterm><primary><option>-fno-cse</option></primary></indexterm>
1429           </term>
1430           <listitem>
1431             <para>Turns off the common-sub-expression elimination optimisation.
1432               Can be useful if you have some <literal>unsafePerformIO</literal>
1433             expressions that you don't want commoned-up.</para>
1434           </listitem>
1435         </varlistentry>
1436
1437         <varlistentry>
1438           <term>
1439             <option>-fno-strictness</option>
1440             <indexterm><primary><option>-fno-strictness</option></primary></indexterm>
1441           </term>
1442           <listitem>
1443             <para>Turns off the strictness analyser; sometimes it eats
1444             too many cycles.</para>
1445           </listitem>
1446         </varlistentry>
1447
1448         <varlistentry>
1449           <term>
1450             <option>-fno-full-laziness</option>
1451             <indexterm><primary><option>-fno-full-laziness</option></primary></indexterm>
1452           </term>
1453           <listitem>
1454             <para>Turns off the full laziness optimisation (also known as
1455               let-floating).  Full laziness increases sharing, which can lead
1456               to increased memory residency.</para>
1457
1458             <para>NOTE: GHC doesn't implement complete full-laziness.
1459             When optimisation in on, and
1460             <option>-fno-full-laziness</option> is not given, some
1461             transformations that increase sharing are performed, such
1462             as extracting repeated computations from a loop.  These
1463             are the same transformations that a fully lazy
1464             implementation would do, the difference is that GHC
1465             doesn't consistently apply full-laziness, so don't rely on
1466             it.</para>
1467           </listitem>
1468         </varlistentry>
1469
1470         <varlistentry>
1471           <term>
1472             <option>-fno-state-hack</option>
1473             <indexterm><primary><option>-fno-state-hack</option></primary></indexterm>
1474           </term>
1475           <listitem>
1476             <para>Turn off the "state hack" whereby any lambda with a
1477               <literal>State#</literal> token as argument is considered to be
1478               single-entry, hence it is considered OK to inline things inside
1479               it.  This can improve performance of IO and ST monad code, but it
1480             runs the risk of reducing sharing.</para> 
1481           </listitem>
1482         </varlistentry>
1483
1484         <varlistentry>
1485           <term>
1486             <option>-fno-state-hack</option>
1487             <indexterm><primary><option>-fno-state-hack</option></primary></indexterm>
1488           </term>
1489           <listitem>
1490             <para>Turn off the "state hack" whereby any lambda with a
1491               <literal>State#</literal> token as argument is considered to be
1492               single-entry, hence it is considered OK to inline things inside
1493               it.  This can improve performance of IO and ST monad code, but it
1494             runs the risk of reducing sharing.</para> 
1495           </listitem>
1496         </varlistentry>
1497
1498         <varlistentry>
1499           <term>
1500             <option>-fomit-interface-pragmas</option>
1501             <indexterm><primary><option>-fomit-interface-pragmas</option></primary></indexterm>
1502           </term>
1503           <listitem>
1504             <para>Tells GHC to omit all inessential information from the interface file
1505               generated for the module being compiled (say M).  This means that a module
1506               importing M will see only the <emphasis>types</emphasis> of the functions that M exports, but not
1507               their unfoldings, strictness info, etc.  Hence, for example,
1508               no function exported by M will be inlined
1509               into an importing module.  The benefit is that modules that import M will
1510               need to be recompiled less often (only when M's exports change their type,
1511               not when they change their implementation).
1512               </para>
1513           </listitem>
1514         </varlistentry>
1515
1516         <varlistentry>
1517           <term>
1518             <option>-fignore-interface-pragmas</option>
1519             <indexterm><primary><option>-fignore-interface-pragmas</option></primary></indexterm>
1520           </term>
1521           <listitem>
1522             <para>Tells GHC to ignore all inessential information when reading interface files.
1523             That is, even if <filename>M.hi</filename> contains unfolding or strictness information
1524             for a function, GHC will ignore that information.</para>
1525           </listitem>
1526         </varlistentry>
1527
1528         <varlistentry>
1529           <term>
1530             <option>-funbox-strict-fields</option>:
1531             <indexterm><primary><option>-funbox-strict-fields</option></primary></indexterm>
1532             <indexterm><primary>strict constructor fields</primary></indexterm>
1533             <indexterm><primary>constructor fields, strict</primary></indexterm>
1534           </term>
1535           <listitem>
1536             <para>This option causes all constructor fields which are
1537             marked strict (i.e. &ldquo;!&rdquo;) to be unboxed or
1538             unpacked if possible.  It is equivalent to adding an
1539             <literal>UNPACK</literal> pragma to every strict
1540             constructor field (see <xref
1541             linkend="unpack-pragma"/>).</para>
1542
1543             <para>This option is a bit of a sledgehammer: it might
1544             sometimes make things worse.  Selectively unboxing fields
1545             by using <literal>UNPACK</literal> pragmas might be
1546             better.</para>
1547           </listitem>
1548         </varlistentry>
1549
1550         <varlistentry>
1551           <term>
1552             <option>-funfolding-update-in-place=<replaceable>n</replaceable></option>
1553             <indexterm><primary><option>-funfolding-update-in-place</option></primary></indexterm>
1554           </term>
1555           <listitem>
1556             <para>Switches on an experimental "optimisation".
1557             Switching it on makes the compiler a little keener to
1558             inline a function that returns a constructor, if the
1559             context is that of a thunk.
1560 <programlisting>
1561    x = plusInt a b
1562 </programlisting>
1563             If we inlined plusInt we might get an opportunity to use
1564             update-in-place for the thunk 'x'.</para>
1565           </listitem>
1566         </varlistentry>
1567
1568         <varlistentry>
1569           <term>
1570             <option>-funfolding-creation-threshold=<replaceable>n</replaceable></option>:
1571             <indexterm><primary><option>-funfolding-creation-threshold</option></primary></indexterm>
1572             <indexterm><primary>inlining, controlling</primary></indexterm>
1573             <indexterm><primary>unfolding, controlling</primary></indexterm>
1574           </term>
1575           <listitem>
1576             <para>(Default: 45) Governs the maximum size that GHC will 
1577             allow a function unfolding to be.   (An unfolding has a
1578             &ldquo;size&rdquo; that reflects the cost in terms of
1579             &ldquo;code bloat&rdquo; of expanding that unfolding at
1580             at a call site. A bigger function would be assigned a
1581             bigger cost.) </para>
1582
1583             <para> Consequences: (a) nothing larger than this will be
1584             inlined (unless it has an INLINE pragma); (b) nothing
1585             larger than this will be spewed into an interface
1586             file. </para>
1587
1588
1589             <para> Increasing this figure is more likely to result in longer
1590             compile times than faster code.  The next option is more
1591             useful:</para>
1592           </listitem>
1593         </varlistentry>
1594
1595         <varlistentry>
1596           <term><option>-funfolding-use-threshold=<replaceable>n</replaceable></option></term>
1597           <listitem>
1598             <indexterm><primary><option>-funfolding-use-threshold</option></primary></indexterm>
1599             <indexterm><primary>inlining, controlling</primary></indexterm>
1600             <indexterm><primary>unfolding, controlling</primary></indexterm>
1601
1602             <para>(Default: 8) This is the magic cut-off figure for
1603             unfolding: below this size, a function definition will be
1604             unfolded at the call-site, any bigger and it won't.  The
1605             size computed for a function depends on two things: the
1606             actual size of the expression minus any discounts that
1607             apply (see <option>-funfolding-con-discount</option>).</para>
1608           </listitem>
1609         </varlistentry>
1610       </variablelist>
1611
1612     </sect2>
1613     
1614   </sect1>
1615   
1616   &phases;  
1617   
1618   <sect1 id="using-concurrent">
1619     <title>Using Concurrent Haskell</title>
1620     <indexterm><primary>Concurrent Haskell</primary><secondary>using</secondary></indexterm>
1621
1622     <para>GHC supports Concurrent Haskell by default, without requiring a
1623       special option or libraries compiled in a certain way.  To get access to
1624       the support libraries for Concurrent Haskell, just import
1625       <ulink
1626         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>
1627
1628     <para>The following RTS option(s) affect the behaviour of Concurrent
1629       Haskell programs:<indexterm><primary>RTS options, concurrent</primary></indexterm></para>
1630
1631     <variablelist>
1632       <varlistentry>
1633         <term><option>-C<replaceable>s</replaceable></option></term>
1634         <listitem>
1635           <para><indexterm><primary><option>-C<replaceable>s</replaceable></option></primary><secondary>RTS option</secondary></indexterm>
1636             Sets the context switch interval to <replaceable>s</replaceable>
1637             seconds.  A context switch will occur at the next heap block
1638             allocation after the timer expires (a heap block allocation occurs
1639             every 4k of allocation).  With <option>-C0</option> or
1640             <option>-C</option>, context switches will occur as often as
1641             possible (at every heap block allocation).  By default, context
1642             switches occur every 20ms.</para>
1643         </listitem>
1644       </varlistentry>
1645     </variablelist>
1646   </sect1>
1647
1648   <sect1 id="using-smp">
1649     <title>Using SMP parallelism</title>
1650     <indexterm><primary>parallelism</primary>
1651     </indexterm>
1652     <indexterm><primary>SMP</primary>
1653     </indexterm>
1654
1655     <para>GHC supports running Haskell programs in parallel on an SMP
1656       (symmetric multiprocessor).</para>
1657
1658     <para>There's a fine distinction between
1659       <emphasis>concurrency</emphasis> and <emphasis>parallelism</emphasis>:
1660       parallelism is all about making your program run
1661       <emphasis>faster</emphasis> by making use of multiple processors
1662       simultaneously.  Concurrency, on the other hand, is a means of
1663       abstraction: it is a convenient way to structure a program that must
1664       respond to multiple asynchronous events.</para>
1665
1666     <para>However, the two terms are certainly related.  By making use of
1667       multiple CPUs it is possible to run concurrent threads in parallel,
1668       and this is exactly what GHC's SMP parallelism support does.  But it
1669       is also possible to obtain performance improvements with parallelism
1670       on programs that do not use concurrency.  This section describes how to
1671       use GHC to compile and run parallel programs, in <xref
1672         linkend="lang-parallel" /> we desribe the language features that affect
1673     parallelism.</para>
1674     
1675     <sect2 id="parallel-options">
1676       <title>Options to enable SMP parallelism</title>
1677
1678       <para>In order to make use of multiple CPUs, your program must be
1679         linked with the <option>-threaded</option> option (see <xref
1680           linkend="options-linker" />).  Then, to run a program on multiple
1681         CPUs, use the RTS <option>-N</option> option:</para>
1682       
1683       <variablelist>
1684         <varlistentry>
1685           <term><option>-N<replaceable>x</replaceable></option></term>
1686           <listitem>
1687             <para><indexterm><primary><option>-N<replaceable>x</replaceable></option></primary><secondary>RTS option</secondary></indexterm>
1688               Use <replaceable>x</replaceable> simultaneous threads when
1689               running the program.  Normally <replaceable>x</replaceable>
1690               should be chosen to match the number of CPU cores on the machine.
1691               There is no means (currently) by which this value may vary after
1692               the program has started.</para> 
1693             
1694             <para>For example, on a dual-core machine we would probably use
1695               <literal>+RTS -N2 -RTS</literal>.</para>
1696             
1697             <para>Whether hyperthreading cores should be counted or not is an
1698               open question; please feel free to experiment and let us know what
1699               results you find.</para>
1700           </listitem>
1701         </varlistentry>
1702       </variablelist>
1703     </sect2>
1704       
1705     <sect2>
1706       <title>Hints for using SMP parallelism</title>
1707
1708       <para>Add the <literal>-sstderr</literal> RTS option when
1709         running the program to see timing stats, which will help to tell you
1710         whether your program got faster by using more CPUs or not.  If the user
1711         time is greater than
1712         the elapsed time, then the program used more than one CPU.  You should
1713         also run the program without <literal>-N</literal> for comparison.</para>
1714
1715       <para>GHC's parallelism support is new and experimental.  It may make your
1716         program go faster, or it might slow it down - either way, we'd be
1717         interested to hear from you.</para>
1718       
1719       <para>One significant limitation with the current implementation is that
1720         the garbage collector is still single-threaded, and all execution must
1721         stop when GC takes place.  This can be a significant bottleneck in a
1722         parallel program, especially if your program does a lot of GC.  If this
1723         happens to you, then try reducing the cost of GC by tweaking the GC
1724         settings (<xref linkend="rts-options-gc" />): enlarging the heap or the
1725         allocation area size is a good start.</para>
1726     </sect2>
1727   </sect1>
1728
1729   <sect1 id="options-platform">
1730     <title>Platform-specific Flags</title>
1731
1732     <indexterm><primary>-m* options</primary></indexterm>
1733     <indexterm><primary>platform-specific options</primary></indexterm>
1734     <indexterm><primary>machine-specific options</primary></indexterm>
1735
1736     <para>Some flags only make sense for particular target
1737     platforms.</para>
1738
1739     <variablelist>
1740
1741       <varlistentry>
1742         <term><option>-monly-[32]-regs</option>:</term>
1743         <listitem>
1744           <para>(iX86 machines)<indexterm><primary>-monly-N-regs
1745           option (iX86 only)</primary></indexterm> GHC tries to
1746           &ldquo;steal&rdquo; four registers from GCC, for performance
1747           reasons; it almost always works.  However, when GCC is
1748           compiling some modules with four stolen registers, it will
1749           crash, probably saying:
1750
1751 <screen>
1752 Foo.hc:533: fixed or forbidden register was spilled.
1753 This may be due to a compiler bug or to impossible asm
1754 statements or clauses.
1755 </screen>
1756
1757           Just give some registers back with
1758           <option>-monly-N-regs</option>.  Try `3' first, then `2'.
1759           If `2' doesn't work, please report the bug to us.</para>
1760         </listitem>
1761       </varlistentry>
1762     </variablelist>
1763
1764   </sect1>
1765
1766 &runtime;
1767
1768 <sect1 id="ext-core">
1769   <title>Generating and compiling External Core Files</title>
1770
1771   <indexterm><primary>intermediate code generation</primary></indexterm>
1772
1773   <para>GHC can dump its optimized intermediate code (said to be in &ldquo;Core&rdquo; format) 
1774   to a file as a side-effect of compilation. Core files, which are given the suffix
1775   <filename>.hcr</filename>, can be read and processed by non-GHC back-end
1776   tools.  The Core format is formally described in <ulink url="http://www.haskell.org/ghc/docs/papers/core.ps.gz">
1777   <citetitle>An External Representation for the GHC Core Language</citetitle></ulink>, 
1778   and sample tools (in Haskell)
1779   for manipulating Core files are available in the GHC source distribution 
1780   directory <literal>/fptools/ghc/utils/ext-core</literal>.  
1781   Note that the format of <literal>.hcr</literal> 
1782   files is <emphasis>different</emphasis> (though similar) to the Core output format generated 
1783   for debugging purposes (<xref linkend="options-debugging"/>).</para>
1784
1785   <para>The Core format natively supports notes which you can add to
1786   your source code using the <literal>CORE</literal> pragma (see <xref
1787   linkend="pragmas"/>).</para>
1788
1789     <variablelist>
1790
1791         <varlistentry>
1792           <term>
1793             <option>-fext-core</option>
1794             <indexterm><primary><option>-fext-core</option></primary></indexterm>
1795           </term>
1796           <listitem>
1797             <para>Generate <literal>.hcr</literal> files.</para>
1798           </listitem>
1799         </varlistentry>
1800
1801     </variablelist>
1802
1803 <para>GHC can also read in External Core files as source; just give the <literal>.hcr</literal> file on
1804 the command line, instead of the <literal>.hs</literal> or <literal>.lhs</literal> Haskell source.
1805 A current infelicity is that you need to give the <literal>-fglasgow-exts</literal> flag too, because
1806 ordinary Haskell 98, when translated to External Core, uses things like rank-2 types.</para>
1807 </sect1>
1808
1809 &debug;
1810 &flags;
1811
1812 </chapter>
1813
1814 <!-- Emacs stuff:
1815      ;;; Local Variables: ***
1816      ;;; mode: xml ***
1817      ;;; sgml-parent-document: ("users_guide.xml" "book" "chapter") ***
1818      ;;; End: ***
1819  -->