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