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