[project @ 2003-11-27 13:27:11 by simonmar]
[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 this mode, 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 <- 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         </listitem>
944       </varlistentry>
945
946       <varlistentry>
947         <term><option>-fwarn-unused-imports</option>:</term>
948         <listitem>
949           <indexterm><primary><option>-fwarn-unused-imports</option></primary></indexterm>
950           <indexterm><primary>unused imports, warning</primary></indexterm>
951           <indexterm><primary>imports, unused</primary></indexterm>
952
953           <para>Report any objects that are explicitly imported but
954           never used.</para>
955         </listitem>
956       </varlistentry>
957
958       <varlistentry>
959         <term><option>-fwarn-unused-matches</option>:</term>
960         <listitem>
961           <indexterm><primary><option>-fwarn-unused-matches</option></primary></indexterm>
962           <indexterm><primary>unused matches, warning</primary></indexterm>
963           <indexterm><primary>matches, unused</primary></indexterm>
964
965           <para>Report all unused variables which arise from pattern
966           matches, including patterns consisting of a single variable.
967           For instance <literal>f x y = []</literal> would report
968           <VarName>x</VarName> and <VarName>y</VarName> as unused.  The
969           warning is suppressed if the variable name begins with an underscore, thus:
970             <programlisting>
971                f _x = True
972             </programlisting>
973           </para>
974         </listitem>
975       </varlistentry>
976
977     </VariableList>
978
979     <para>If you're feeling really paranoid, the
980     <option>-dcore-lint</option>
981     option<indexterm><primary><option>-dcore-lint</option></primary></indexterm>
982     is a good choice.  It turns on heavyweight intra-pass
983     sanity-checking within GHC.  (It checks GHC's sanity, not
984     yours.)</para>
985
986   </sect1>
987
988   &packages;
989
990   <sect1 id="options-optimise">
991     <title>Optimisation (code improvement)</title>
992
993     <indexterm><primary>optimisation</primary></indexterm>
994     <indexterm><primary>improvement, code</primary></indexterm>
995
996     <para>The <option>-O*</option> options specify convenient
997     &ldquo;packages&rdquo; of optimisation flags; the
998     <option>-f*</option> options described later on specify
999     <emphasis>individual</emphasis> optimisations to be turned on/off;
1000     the <option>-m*</option> options specify
1001     <emphasis>machine-specific</emphasis> optimisations to be turned
1002     on/off.</para>
1003
1004     <sect2 id="optimise-pkgs">
1005       <title><option>-O*</option>: convenient &ldquo;packages&rdquo; of optimisation flags.</title>
1006
1007       <para>There are <emphasis>many</emphasis> options that affect
1008       the quality of code produced by GHC.  Most people only have a
1009       general goal, something like &ldquo;Compile quickly&rdquo; or
1010       &ldquo;Make my program run like greased lightning.&rdquo; The
1011       following &ldquo;packages&rdquo; of optimisations (or lack
1012       thereof) should suffice.</para>
1013
1014       <para>Note that higher optimisation levels cause more
1015       cross-module optimisation to be performed, which can have an
1016       impact on how much of your program needs to be recompiled when
1017       you change something.  This is one reaosn to stick to
1018       no-optimisation when developing code.</para>
1019
1020       <variablelist>
1021
1022         <varlistentry>
1023           <term>No <option>-O*</option>-type option specified:</term>
1024           <indexterm><primary>-O* not specified</primary></indexterm>
1025           <listitem>
1026             <para>This is taken to mean: &ldquo;Please compile
1027             quickly; I'm not over-bothered about compiled-code
1028             quality.&rdquo; So, for example: <command>ghc -c
1029             Foo.hs</command></para>
1030           </listitem>
1031         </varlistentry>
1032
1033         <varlistentry>
1034           <term><option>-O0</option>:</term>
1035           <indexterm><primary><option>-O0</option></primary></indexterm>
1036           <listitem>
1037             <para>Means &ldquo;turn off all optimisation&rdquo;,
1038             reverting to the same settings as if no
1039             <option>-O</option> options had been specified.  Saying
1040             <option>-O0</option> can be useful if
1041             eg. <command>make</command> has inserted a
1042             <option>-O</option> on the command line already.</para>
1043           </listitem>
1044         </varlistentry>
1045
1046         <varlistentry>
1047           <term><option>-O</option> or <option>-O1</option>:</term>
1048           <indexterm><primary>-O option</primary></indexterm>
1049           <indexterm><primary>-O1 option</primary></indexterm>
1050           <indexterm><primary>optimise</primary><secondary>normally</secondary></indexterm>
1051           <listitem>
1052             <para>Means: &ldquo;Generate good-quality code without
1053             taking too long about it.&rdquo; Thus, for example:
1054             <command>ghc -c -O Main.lhs</command></para>
1055
1056             <para><option>-O</option> currently also implies
1057             <option>-fvia-C</option>.  This may change in the
1058             future.</para>
1059           </listitem>
1060         </varlistentry>
1061
1062         <varlistentry>
1063           <term><option>-O2</option>:</term>
1064           <indexterm><primary>-O2 option</primary></indexterm>
1065           <indexterm><primary>optimise</primary><secondary>aggressively</secondary></indexterm>
1066           <listitem>
1067             <para>Means: &ldquo;Apply every non-dangerous
1068             optimisation, even if it means significantly longer
1069             compile times.&rdquo;</para>
1070
1071             <para>The avoided &ldquo;dangerous&rdquo; optimisations
1072             are those that can make runtime or space
1073             <emphasis>worse</emphasis> if you're unlucky.  They are
1074             normally turned on or off individually.</para>
1075
1076             <para>At the moment, <option>-O2</option> is
1077             <emphasis>unlikely</emphasis> to produce better code than
1078             <option>-O</option>.</para>
1079           </listitem>
1080         </varlistentry>
1081
1082         <varlistentry>
1083           <term><option>-Ofile &lt;file&gt;</option>:</term>
1084           <indexterm><primary>-Ofile &lt;file&gt; option</primary></indexterm>
1085           <indexterm><primary>optimising, customised</primary></indexterm>
1086           <listitem>
1087             <para>(NOTE: not supported since GHC 4.x.  Please ask if
1088             you're interested in this.)</para>
1089             
1090             <para>For those who need <emphasis>absolute</emphasis>
1091             control over <emphasis>exactly</emphasis> what options are
1092             used (e.g., compiler writers, sometimes :-), a list of
1093             options can be put in a file and then slurped in with
1094             <option>-Ofile</option>.</para>
1095
1096             <para>In that file, comments are of the
1097             <literal>&num;</literal>-to-end-of-line variety; blank
1098             lines and most whitespace is ignored.</para>
1099
1100             <para>Please ask if you are baffled and would like an
1101             example of <option>-Ofile</option>!</para>
1102           </listitem>
1103         </varlistentry>
1104       </variablelist>
1105
1106       <para>We don't use a <option>-O*</option> flag for day-to-day
1107       work.  We use <option>-O</option> to get respectable speed;
1108       e.g., when we want to measure something.  When we want to go for
1109       broke, we tend to use <option>-O2 -fvia-C</option> (and we go for
1110       lots of coffee breaks).</para>
1111
1112       <para>The easiest way to see what <option>-O</option> (etc.)
1113       &ldquo;really mean&rdquo; is to run with <option>-v</option>,
1114       then stand back in amazement.</para>
1115     </sect2>
1116
1117     <sect2 id="options-f">
1118       <title><option>-f*</option>: platform-independent flags</title>
1119
1120       <indexterm><primary>-f* options (GHC)</primary></indexterm>
1121       <indexterm><primary>-fno-* options (GHC)</primary></indexterm>
1122
1123       <para>These flags turn on and off individual optimisations.
1124       They are normally set via the <option>-O</option> options
1125       described above, and as such, you shouldn't need to set any of
1126       them explicitly (indeed, doing so could lead to unexpected
1127       results).  However, there are one or two that may be of
1128       interest:</para>
1129
1130       <variablelist>
1131         <varlistentry>
1132           <term><option>-fexcess-precision</option>:</term>
1133           <listitem>
1134             <indexterm><primary><option>-fexcess-precision</option></primary></indexterm>
1135             <para>When this option is given, intermediate floating
1136             point values can have a <emphasis>greater</emphasis>
1137             precision/range than the final type.  Generally this is a
1138             good thing, but some programs may rely on the exact
1139             precision/range of
1140             <literal>Float</literal>/<literal>Double</literal> values
1141             and should not use this option for their compilation.</para>
1142           </listitem>
1143         </varlistentry>
1144
1145         <varlistentry>
1146           <term><option>-fignore-asserts</option>:</term>
1147           <listitem>
1148             <indexterm><primary><option>-fignore-asserts</option></primary></indexterm>
1149             <para>Causes GHC to ignore uses of the function
1150             <literal>Exception.assert</literal> in source code (in
1151             other words, rewriting <literal>Exception.assert p
1152             e</literal> to <literal>e</literal> (see <xref
1153             linkend="sec-assertions">).  This flag is turned on by
1154             <option>-O</option>.
1155             </para>
1156           </listitem>
1157         </varlistentry>
1158
1159         <varlistentry>
1160           <term><option>-fno-strictness</option></term>
1161           <indexterm><primary><option>-fno-strictness</option></primary>
1162           </indexterm>
1163           <listitem>
1164             <para>Turns off the strictness analyser; sometimes it eats
1165             too many cycles.</para>
1166           </listitem>
1167         </varlistentry>
1168
1169         <varlistentry>
1170           <term><option>-fno-cpr-analyse</option></term>
1171           <indexterm><primary><option>-fno-cpr-analyse</option></primary>
1172           </indexterm>
1173           <listitem>
1174             <para>Turns off the CPR (constructed product result)
1175             analysis; it is somewhat experimental.</para>
1176           </listitem>
1177         </varlistentry>
1178
1179         <varlistentry>
1180           <term><option>-funbox-strict-fields</option>:</term>
1181           <listitem>
1182             <indexterm><primary><option>-funbox-strict-fields</option></primary></indexterm>
1183             <indexterm><primary>strict constructor fields</primary></indexterm>
1184             <indexterm><primary>constructor fields, strict</primary></indexterm>
1185
1186             <para>This option causes all constructor fields which are
1187             marked strict (i.e. &ldquo;!&rdquo;) to be unboxed or
1188             unpacked if possible.  It is equivalent to adding an
1189             <literal>UNPACK</literal> pragma to every strict
1190             constructor field (see <xref
1191             linkend="unpack-pragma">).</para>
1192
1193             <para>This option is a bit of a sledgehammer: it might
1194             sometimes make things worse.  Selectively unboxing fields
1195             by using <literal>UNPACK</literal> pragmas might be
1196             better.</para>
1197           </listitem>
1198         </varlistentry>
1199
1200         <varlistentry>
1201           <term><option>-funfolding-update-in-place&lt;n&gt;</option></term>
1202           <indexterm><primary><option>-funfolding-update-in-place</option></primary></indexterm>
1203           <listitem>
1204             <para>Switches on an experimental "optimisation".
1205             Switching it on makes the compiler a little keener to
1206             inline a function that returns a constructor, if the
1207             context is that of a thunk.
1208 <ProgramListing>
1209    x = plusInt a b
1210 </ProgramListing>
1211             If we inlined plusInt we might get an opportunity to use
1212             update-in-place for the thunk 'x'.</para>
1213           </listitem>
1214         </varlistentry>
1215
1216         <varlistentry>
1217           <term><option>-funfolding-creation-threshold&lt;n&gt;</option>:</term>
1218           <listitem>
1219             <indexterm><primary><option>-funfolding-creation-threshold</option></primary></indexterm>
1220             <indexterm><primary>inlining, controlling</primary></indexterm>
1221             <indexterm><primary>unfolding, controlling</primary></indexterm>
1222             
1223             <para>(Default: 45) Governs the maximum size that GHC will 
1224             allow a function unfolding to be.   (An unfolding has a
1225             &ldquo;size&rdquo; that reflects the cost in terms of
1226             &ldquo;code bloat&rdquo; of expanding that unfolding at
1227             at a call site. A bigger function would be assigned a
1228             bigger cost.) </para>
1229
1230             <para> Consequences: (a) nothing larger than this will be
1231             inlined (unless it has an INLINE pragma); (b) nothing
1232             larger than this will be spewed into an interface
1233             file. </para>
1234
1235
1236             <para> Increasing this figure is more likely to result in longer
1237             compile times than faster code.  The next option is more
1238             useful:</para>
1239           </listitem>
1240         </varlistentry>
1241
1242         <varlistentry>
1243           <term><option>-funfolding-use-threshold&lt;n&gt;</option>:</term>
1244           <listitem>
1245             <indexterm><primary><option>-funfolding-use-threshold</option></primary></indexterm>
1246             <indexterm><primary>inlining, controlling</primary></indexterm>
1247             <indexterm><primary>unfolding, controlling</primary></indexterm>
1248
1249             <para>(Default: 8) This is the magic cut-off figure for
1250             unfolding: below this size, a function definition will be
1251             unfolded at the call-site, any bigger and it won't.  The
1252             size computed for a function depends on two things: the
1253             actual size of the expression minus any discounts that
1254             apply (see <option>-funfolding-con-discount</option>).</para>
1255           </listitem>
1256         </varlistentry>
1257       </variablelist>
1258
1259     </sect2>
1260     
1261   </sect1>
1262   
1263   &phases;  
1264   
1265   <sect1 id="sec-using-concurrent">
1266 <title>Using Concurrent Haskell</title>
1267
1268              <indexterm><primary>Concurrent Haskell&mdash;use</primary></indexterm>
1269
1270 <para>
1271 GHC supports Concurrent Haskell by default, without requiring a
1272 special option or libraries compiled in a certain way.  To get access
1273 to the support libraries for Concurrent Haskell, just import
1274 <literal>Control.Concurrent</literal> (details are in the accompanying
1275 library documentation).</para>
1276
1277 <para>
1278 RTS options are provided for modifying the behaviour of the threaded
1279 runtime system.  See <XRef LinkEnd="parallel-rts-opts">.
1280 </para>
1281
1282 <para>
1283 Concurrent Haskell is described in more detail in the documentation
1284 for the <literal>Control.Concurrent</literal> module.
1285 </para>
1286
1287 </Sect1>
1288
1289 <Sect1 id="sec-using-parallel">
1290 <title>Using Parallel Haskell</title>
1291
1292 <para>
1293 <indexterm><primary>Parallel Haskell&mdash;use</primary></indexterm>
1294 </para>
1295
1296 <para>
1297 &lsqb;You won't be able to execute parallel Haskell programs unless PVM3
1298 (Parallel Virtual Machine, version 3) is installed at your site.&rsqb;
1299 </Para>
1300
1301 <para>
1302 To compile a Haskell program for parallel execution under PVM, use the
1303 <Option>-parallel</Option> option,<IndexTerm><Primary>-parallel
1304 option</Primary></IndexTerm> both when compiling <Emphasis>and
1305 linking</Emphasis>.  You will probably want to <Literal>import
1306 Parallel</Literal> into your Haskell modules.
1307 </Para>
1308
1309 <para>
1310 To run your parallel program, once PVM is going, just invoke it
1311 &ldquo;as normal&rdquo;.  The main extra RTS option is
1312 <Option>-qp&lt;n&gt;</Option>, to say how many PVM
1313 &ldquo;processors&rdquo; your program to run on.  (For more details of
1314 all relevant RTS options, please see <XRef
1315 LinkEnd="parallel-rts-opts">.)
1316 </para>
1317
1318 <para>
1319 In truth, running Parallel Haskell programs and getting information
1320 out of them (e.g., parallelism profiles) is a battle with the vagaries of
1321 PVM, detailed in the following sections.
1322 </para>
1323
1324 <Sect2 id="pvm-dummies">
1325 <Title>Dummy's guide to using PVM</Title>
1326
1327 <para>
1328 <indexterm><primary>PVM, how to use</primary></indexterm>
1329 <indexterm><primary>Parallel Haskell&mdash;PVM use</primary></indexterm>
1330 Before you can run a parallel program under PVM, you must set the
1331 required environment variables (PVM's idea, not ours); something like,
1332 probably in your <filename>.cshrc</filename> or equivalent:
1333
1334 <ProgramListing>
1335 setenv PVM_ROOT /wherever/you/put/it
1336 setenv PVM_ARCH `$PVM_ROOT/lib/pvmgetarch`
1337 setenv PVM_DPATH $PVM_ROOT/lib/pvmd
1338 </ProgramListing>
1339
1340 </para>
1341
1342 <para>
1343 Creating and/or controlling your &ldquo;parallel machine&rdquo; is a purely-PVM
1344 business; nothing specific to Parallel Haskell. The following paragraphs
1345 describe how to configure your parallel machine interactively.
1346 </Para>
1347
1348 <Para>
1349 If you use parallel Haskell regularly on the same machine configuration it
1350 is a good idea to maintain a file with all machine names and to make the
1351 environment variable PVM_HOST_FILE point to this file. Then you can avoid
1352 the interactive operations described below by just saying
1353 </Para>
1354
1355 <ProgramListing>
1356 pvm $PVM_HOST_FILE
1357 </ProgramListing>
1358
1359 <Para>
1360 You use the <Command>pvm</Command><IndexTerm><Primary>pvm command</Primary></IndexTerm> command to start PVM on your
1361 machine.  You can then do various things to control/monitor your
1362 &ldquo;parallel machine;&rdquo; the most useful being:
1363 </para>
1364
1365 <para>
1366 <InformalTable>
1367 <TGroup Cols=2>
1368 <ColSpec Align="Left">
1369 <TBody>
1370
1371 <row>
1372 <entry><KeyCombo><KeyCap>Control</KeyCap><KeyCap>D</KeyCap></KeyCombo></entry>
1373 <entry>exit <command>pvm</command>, leaving it running</entry>
1374 </row>
1375
1376 <row>
1377 <entry><command>halt</command></entry>
1378 <entry>kill off this &ldquo;parallel machine&rdquo; &amp; exit</entry>
1379 </row>
1380
1381 <row>
1382 <entry><command>add &lt;host&gt;</command></entry>
1383 <entry>add <command>&lt;host&gt;</command> as a processor</entry>
1384 </row>
1385
1386 <row>
1387 <entry><command>delete &lt;host&gt;</command></entry>
1388 <entry>delete <command>&lt;host&gt;</command></entry>
1389 </row>
1390
1391 <row>
1392 <entry><command>reset</command></entry>
1393 <entry>kill what's going, but leave PVM up</entry>
1394 </row>
1395
1396 <row>
1397 <entry><command>conf</command></entry>
1398 <entry>list the current configuration</entry>
1399 </row>
1400
1401 <row>
1402 <entry><command>ps</command></entry>
1403 <entry>report processes' status</entry>
1404 </row>
1405
1406 <row>
1407 <entry><command>pstat &lt;pid&gt;</command></entry>
1408 <entry>status of a particular process</entry>
1409 </row>
1410
1411 </TBody>
1412 </TGroup>
1413 </InformalTable>
1414 </para>
1415
1416 <para>
1417 The PVM documentation can tell you much, much more about <command>pvm</command>!
1418 </para>
1419
1420 </sect2>
1421
1422 <Sect2 id="par-profiles">
1423 <Title>Parallelism profiles</Title>
1424
1425 <para>
1426 <indexterm><primary>parallelism profiles</primary></indexterm>
1427 <indexterm><primary>profiles, parallelism</primary></indexterm>
1428 <indexterm><primary>visualisation tools</primary></indexterm>
1429 </para>
1430
1431 <para>
1432 With Parallel Haskell programs, we usually don't care about the
1433 results&mdash;only with &ldquo;how parallel&rdquo; it was!  We want pretty pictures.
1434 </para>
1435
1436 <Para>
1437 Parallelism profiles (&agrave; la <Command>hbcpp</Command>) can be generated with the
1438 <Option>-qP</Option><IndexTerm><Primary>-qP RTS option (concurrent, parallel)</Primary></IndexTerm> RTS option.  The
1439 per-processor profiling info is dumped into files named
1440 <Filename>&lt;full-path&gt;&lt;program&gt;.gr</Filename>.  These are then munged into a PostScript picture,
1441 which you can then display.  For example, to run your program
1442 <Filename>a.out</Filename> on 8 processors, then view the parallelism profile, do:
1443 </Para>
1444
1445 <Para>
1446
1447 <Screen>
1448 <prompt>&dollar;</prompt> ./a.out +RTS -qP -qp8
1449 <prompt>&dollar;</prompt> grs2gr *.???.gr &#62; temp.gr # combine the 8 .gr files into one
1450 <prompt>&dollar;</prompt> gr2ps -O temp.gr              # cvt to .ps; output in temp.ps
1451 <prompt>&dollar;</prompt> ghostview -seascape temp.ps   # look at it!
1452 </Screen>
1453
1454 </Para>
1455
1456 <para>
1457 The scripts for processing the parallelism profiles are distributed
1458 in <filename>ghc/utils/parallel/</filename>.
1459 </para>
1460
1461 </sect2>
1462
1463 <Sect2>
1464 <Title>Other useful info about running parallel programs</Title>
1465
1466 <Para>
1467 The &ldquo;garbage-collection statistics&rdquo; RTS options can be useful for
1468 seeing what parallel programs are doing.  If you do either
1469 <Option>+RTS -Sstderr</Option><IndexTerm><Primary>-Sstderr RTS option</Primary></IndexTerm> or <Option>+RTS -sstderr</Option>, then
1470 you'll get mutator, garbage-collection, etc., times on standard
1471 error. The standard error of all PE's other than the `main thread'
1472 appears in <filename>/tmp/pvml.nnn</filename>, courtesy of PVM.
1473 </para>
1474
1475 <para>
1476 Whether doing <option>+RTS -Sstderr</option> or not, a handy way to watch
1477 what's happening overall is: <command>tail -f /tmp/pvml.nnn</command>.
1478 </para>
1479
1480 </sect2>
1481
1482 <Sect2 id="parallel-rts-opts">
1483 <title>RTS options for Concurrent/Parallel Haskell
1484 </title>
1485
1486 <para>
1487 <indexterm><primary>RTS options, concurrent</primary></indexterm>
1488 <indexterm><primary>RTS options, parallel</primary></indexterm>
1489 <indexterm><primary>Concurrent Haskell&mdash;RTS options</primary></indexterm>
1490 <indexterm><primary>Parallel Haskell&mdash;RTS options</primary></indexterm>
1491 </para>
1492
1493 <para>
1494 Besides the usual runtime system (RTS) options
1495 (<XRef LinkEnd="runtime-control">), there are a few options particularly
1496 for concurrent/parallel execution.
1497 </para>
1498
1499 <para>
1500 <VariableList>
1501
1502 <VarListEntry>
1503 <Term><Option>-qp&lt;N&gt;</Option>:</Term>
1504 <ListItem>
1505 <Para>
1506 <IndexTerm><Primary>-qp&lt;N&gt; RTS option</Primary></IndexTerm>
1507 (PARALLEL ONLY) Use <Literal>&lt;N&gt;</Literal> PVM processors to run this program;
1508 the default is 2.
1509 </para>
1510 </listitem>
1511 </varlistentry>
1512 <varlistentry>
1513 <term><option>-C[&lt;us&gt;]</option>:</term>
1514 <listitem>
1515 <para>
1516 <indexterm><primary>-C&lt;us&gt; RTS option</primary></indexterm> Sets
1517 the context switch interval to <literal>&lt;s&gt;</literal> seconds.
1518 A context switch will occur at the next heap block allocation after
1519 the timer expires (a heap block allocation occurs every 4k of
1520 allocation).  With <option>-C0</option> or <option>-C</option>,
1521 context switches will occur as often as possible (at every heap block
1522 allocation).  By default, context switches occur every 20ms
1523 milliseconds.  Note that GHC's internal timer ticks every 20ms, and
1524 the context switch timer is always a multiple of this timer, so 20ms
1525 is the maximum granularity available for timed context switches.
1526 </para>
1527 </listitem>
1528 </varlistentry>
1529 <varlistentry>
1530 <term><option>-q[v]</option>:</term>
1531 <listitem>
1532 <para>
1533 <indexterm><primary>-q RTS option</primary></indexterm>
1534 (PARALLEL ONLY) Produce a quasi-parallel profile of thread activity,
1535 in the file <FIlename>&lt;program&gt;.qp</FIlename>.  In the style of <command>hbcpp</command>, this profile
1536 records the movement of threads between the green (runnable) and red
1537 (blocked) queues.  If you specify the verbose suboption (<option>-qv</option>), the
1538 green queue is split into green (for the currently running thread
1539 only) and amber (for other runnable threads).  We do not recommend
1540 that you use the verbose suboption if you are planning to use the
1541 <Command>hbcpp</Command> profiling tools or if you are context switching at every heap
1542 check (with <Option>-C</Option>).
1543 -->
1544 </Para>
1545 </ListItem>
1546 </VarListEntry>
1547 <VarListEntry>
1548 <Term><Option>-qt&lt;num&gt;</Option>:</Term>
1549 <ListItem>
1550 <Para>
1551 <IndexTerm><Primary>-qt&lt;num&gt; RTS option</Primary></IndexTerm>
1552 (PARALLEL ONLY) Limit the thread pool size, i.e. the number of concurrent
1553 threads per processor to <Literal>&lt;num&gt;</Literal>.  The default is
1554 32.  Each thread requires slightly over 1K <Emphasis>words</Emphasis> in
1555 the heap for thread state and stack objects.  (For 32-bit machines, this
1556 translates to 4K bytes, and for 64-bit machines, 8K bytes.)
1557 </Para>
1558 </ListItem>
1559 </VarListEntry>
1560 <!-- no more -HWL
1561 <VarListEntry>
1562 <Term><Option>-d</Option>:</Term>
1563 <ListItem>
1564 <Para>
1565 <IndexTerm><Primary>-d RTS option (parallel)</Primary></IndexTerm>
1566 (PARALLEL ONLY) Turn on debugging.  It pops up one xterm (or GDB, or
1567 something&hellip;) per PVM processor.  We use the standard <Command>debugger</Command>
1568 script that comes with PVM3, but we sometimes meddle with the
1569 <Command>debugger2</Command> script.  We include ours in the GHC distribution,
1570 in <Filename>ghc/utils/pvm/</Filename>.
1571 </Para>
1572 </ListItem>
1573 </VarListEntry>
1574 -->
1575 <VarListEntry>
1576 <Term><Option>-qe&lt;num&gt;</Option>:</Term>
1577 <ListItem>
1578 <Para>
1579 <IndexTerm><Primary>-qe&lt;num&gt; RTS option
1580 (parallel)</Primary></IndexTerm> (PARALLEL ONLY) Limit the spark pool size
1581 i.e. the number of pending sparks per processor to
1582 <Literal>&lt;num&gt;</Literal>. The default is 100. A larger number may be
1583 appropriate if your program generates large amounts of parallelism
1584 initially.
1585 </Para>
1586 </ListItem>
1587 </VarListEntry>
1588 <VarListEntry>
1589 <Term><Option>-qQ&lt;num&gt;</Option>:</Term>
1590 <ListItem>
1591 <Para>
1592 <IndexTerm><Primary>-qQ&lt;num&gt; RTS option (parallel)</Primary></IndexTerm>
1593 (PARALLEL ONLY) Set the size of packets transmitted between processors
1594 to <Literal>&lt;num&gt;</Literal>. The default is 1024 words. A larger number may be
1595 appropriate if your machine has a high communication cost relative to
1596 computation speed.
1597 </Para>
1598 </ListItem>
1599 </VarListEntry>
1600 <VarListEntry>
1601 <Term><Option>-qh&lt;num&gt;</Option>:</Term>
1602 <ListItem>
1603 <Para>
1604 <IndexTerm><Primary>-qh&lt;num&gt; RTS option (parallel)</Primary></IndexTerm>
1605 (PARALLEL ONLY) Select a packing scheme. Set the number of non-root thunks to pack in one packet to
1606 &lt;num&gt;-1 (0 means infinity). By default GUM uses full-subgraph
1607 packing, i.e. the entire subgraph with the requested closure as root is
1608 transmitted (provided it fits into one packet). Choosing a smaller value
1609 reduces the amount of pre-fetching of work done in GUM. This can be
1610 advantageous for improving data locality but it can also worsen the balance
1611 of the load in the system. 
1612 </Para>
1613 </ListItem>
1614 </VarListEntry>
1615 <VarListEntry>
1616 <Term><Option>-qg&lt;num&gt;</Option>:</Term>
1617 <ListItem>
1618 <Para>
1619 <IndexTerm><Primary>-qg&lt;num&gt; RTS option
1620 (parallel)</Primary></IndexTerm> (PARALLEL ONLY) Select a globalisation
1621 scheme. This option affects the
1622 generation of global addresses when transferring data. Global addresses are
1623 globally unique identifiers required to maintain sharing in the distributed
1624 graph structure. Currently this is a binary option. With &lt;num&gt;=0 full globalisation is used
1625 (default). This means a global address is generated for every closure that
1626 is transmitted. With &lt;num&gt;=1 a thunk-only globalisation scheme is
1627 used, which generated global address only for thunks. The latter case may
1628 lose sharing of data but has a reduced overhead in packing graph structures
1629 and maintaining internal tables of global addresses.
1630 </Para>
1631 </ListItem>
1632 </VarListEntry>
1633 </VariableList>
1634 </para>
1635
1636 </sect2>
1637
1638 </Sect1>
1639
1640   <sect1 id="options-platform">
1641     <title>Platform-specific Flags</title>
1642
1643     <indexterm><primary>-m* options</primary></indexterm>
1644     <indexterm><primary>platform-specific options</primary></indexterm>
1645     <indexterm><primary>machine-specific options</primary></indexterm>
1646
1647     <para>Some flags only make sense for particular target
1648     platforms.</para>
1649
1650     <variablelist>
1651
1652       <varlistentry>
1653         <term><option>-mv8</option>:</term>
1654         <listitem>
1655           <para>(SPARC machines)<indexterm><primary>-mv8 option (SPARC
1656           only)</primary></indexterm> Means to pass the like-named
1657           option to GCC; it says to use the Version 8 SPARC
1658           instructions, notably integer multiply and divide.  The
1659           similiar <option>-m*</option> GCC options for SPARC also
1660           work, actually.</para>
1661         </listitem>
1662       </varlistentry>
1663
1664       <varlistentry>
1665         <term><option>-monly-[32]-regs</option>:</term>
1666         <listitem>
1667           <para>(iX86 machines)<indexterm><primary>-monly-N-regs
1668           option (iX86 only)</primary></indexterm> GHC tries to
1669           &ldquo;steal&rdquo; four registers from GCC, for performance
1670           reasons; it almost always works.  However, when GCC is
1671           compiling some modules with four stolen registers, it will
1672           crash, probably saying:
1673
1674 <Screen>
1675 Foo.hc:533: fixed or forbidden register was spilled.
1676 This may be due to a compiler bug or to impossible asm
1677 statements or clauses.
1678 </Screen>
1679
1680           Just give some registers back with
1681           <option>-monly-N-regs</option>.  Try `3' first, then `2'.
1682           If `2' doesn't work, please report the bug to us.</para>
1683         </listitem>
1684       </varlistentry>
1685     </variablelist>
1686
1687   </sect1>
1688
1689 &runtime;
1690
1691 <sect1 id="ext-core">
1692   <title>Generating and compiling External Core Files</title>
1693
1694   <indexterm><primary>intermediate code generation</primary></indexterm>
1695
1696   <para>GHC can dump its optimized intermediate code (said to be in &ldquo;Core&rdquo; format) 
1697   to a file as a side-effect of compilation. Core files, which are given the suffix
1698   <filename>.hcr</filename>, can be read and processed by non-GHC back-end
1699   tools.  The Core format is formally described in <ulink url="http://www.haskell.org/ghc/docs/papers/core.ps.gz"
1700   <citetitle>An External Representation for the GHC Core Language</citetitle></ulink>, 
1701   and sample tools (in Haskell)
1702   for manipulating Core files are available in the GHC source distribution 
1703   directory <literal>/fptools/ghc/utils/ext-core</literal>.  
1704   Note that the format of <literal>.hcr</literal> 
1705   files is <emphasis>different</emphasis> (though similar) to the Core output format generated 
1706   for debugging purposes (<xref linkend="options-debugging">).</para>
1707
1708   <para>The Core format natively supports notes which you can add to
1709   your source code using the <literal>CORE</literal> pragma (see <xref
1710   linkend="pragmas">).</para>
1711
1712     <variablelist>
1713
1714         <varlistentry>
1715           <term><option>-fext-core</option></term>
1716           <indexterm>
1717             <primary><option>-fext-core</option></primary>
1718           </indexterm>
1719           <listitem>
1720             <para>Generate <literal>.hcr</literal> files.</para>
1721           </listitem>
1722         </varlistentry>
1723
1724     </variablelist>
1725
1726 <para>GHC can also read in External Core files as source; just give the <literal>.hcr</literal> file on
1727 the command line, instead of the <literal>.hs</literal> or <literal>.lhs</literal> Haskell source.
1728 A current infelicity is that you need to give teh <literal>-fglasgow-exts</literal> flag too, because
1729 ordinary Haskell 98, when translated to External Core, uses things like rank-2 types.</para>
1730 </sect1>
1731
1732 &debug;
1733 &flags;
1734
1735 </Chapter>
1736
1737 <!-- Emacs stuff:
1738      ;;; Local Variables: ***
1739      ;;; mode: sgml ***
1740      ;;; sgml-parent-document: ("users_guide.sgml" "book" "chapter") ***
1741      ;;; End: ***
1742  -->