0abae40ba1d51b632774ada27f9950c2fad0c691
[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.  For example:</para>
1189
1190 <ProgramListing>
1191 data T = T !Float !Float
1192 </ProgramListing>
1193
1194             <para>will create a constructor <literal>T</literal>
1195             containing two unboxed floats if the
1196             <option>-funbox-strict-fields</option> flag is given.
1197             This may not always be an optimisation: if the
1198             <Function>T</Function> constructor is scrutinised and the
1199             floats passed to a non-strict function for example, they
1200             will have to be reboxed (this is done automatically by the
1201             compiler).</para>
1202
1203             <para>This option should only be used in conjunction with
1204             <option>-O</option>, in order to expose unfoldings to the
1205             compiler so the reboxing can be removed as often as
1206             possible.  For example:</para>
1207
1208 <ProgramListing>
1209 f :: T -&#62; Float
1210 f (T f1 f2) = f1 + f2
1211 </ProgramListing>
1212
1213             <para>The compiler will avoid reboxing
1214             <Function>f1</Function> and <Function>f2</Function> by
1215             inlining <Function>+</Function> on floats, but only when
1216             <option>-O</option> is on.</para>
1217
1218             <para>Any single-constructor data is eligible for
1219             unpacking; for example</para>
1220
1221 <ProgramListing>
1222 data T = T !(Int,Int)
1223 </ProgramListing>
1224
1225             <para>will store the two <literal>Int</literal>s directly
1226             in the <Function>T</Function> constructor, by flattening
1227             the pair.  Multi-level unpacking is also supported:</para>
1228
1229 <ProgramListing>
1230 data T = T !S
1231 data S = S !Int !Int
1232 </ProgramListing>
1233
1234             <para>will store two unboxed <literal>Int&num;</literal>s
1235             directly in the <Function>T</Function> constructor.</para>
1236           </listitem>
1237         </varlistentry>
1238
1239         <varlistentry>
1240           <term><option>-funfolding-update-in-place&lt;n&gt;</option></term>
1241           <indexterm><primary><option>-funfolding-update-in-place</option></primary></indexterm>
1242           <listitem>
1243             <para>Switches on an experimental "optimisation".
1244             Switching it on makes the compiler a little keener to
1245             inline a function that returns a constructor, if the
1246             context is that of a thunk.
1247 <ProgramListing>
1248    x = plusInt a b
1249 </ProgramListing>
1250             If we inlined plusInt we might get an opportunity to use
1251             update-in-place for the thunk 'x'.</para>
1252           </listitem>
1253         </varlistentry>
1254
1255         <varlistentry>
1256           <term><option>-funfolding-creation-threshold&lt;n&gt;</option>:</term>
1257           <listitem>
1258             <indexterm><primary><option>-funfolding-creation-threshold</option></primary></indexterm>
1259             <indexterm><primary>inlining, controlling</primary></indexterm>
1260             <indexterm><primary>unfolding, controlling</primary></indexterm>
1261             
1262             <para>(Default: 45) Governs the maximum size that GHC will 
1263             allow a function unfolding to be.   (An unfolding has a
1264             &ldquo;size&rdquo; that reflects the cost in terms of
1265             &ldquo;code bloat&rdquo; of expanding that unfolding at
1266             at a call site. A bigger function would be assigned a
1267             bigger cost.) </para>
1268
1269             <para> Consequences: (a) nothing larger than this will be
1270             inlined (unless it has an INLINE pragma); (b) nothing
1271             larger than this will be spewed into an interface
1272             file. </para>
1273
1274
1275             <para> Increasing this figure is more likely to result in longer
1276             compile times than faster code.  The next option is more
1277             useful:</para>
1278           </listitem>
1279         </varlistentry>
1280
1281         <varlistentry>
1282           <term><option>-funfolding-use-threshold&lt;n&gt;</option>:</term>
1283           <listitem>
1284             <indexterm><primary><option>-funfolding-use-threshold</option></primary></indexterm>
1285             <indexterm><primary>inlining, controlling</primary></indexterm>
1286             <indexterm><primary>unfolding, controlling</primary></indexterm>
1287
1288             <para>(Default: 8) This is the magic cut-off figure for
1289             unfolding: below this size, a function definition will be
1290             unfolded at the call-site, any bigger and it won't.  The
1291             size computed for a function depends on two things: the
1292             actual size of the expression minus any discounts that
1293             apply (see <option>-funfolding-con-discount</option>).</para>
1294           </listitem>
1295         </varlistentry>
1296       </variablelist>
1297
1298     </sect2>
1299     
1300   </sect1>
1301   
1302   &phases;  
1303   
1304   <sect1 id="sec-using-concurrent">
1305 <title>Using Concurrent Haskell</title>
1306
1307              <indexterm><primary>Concurrent Haskell&mdash;use</primary></indexterm>
1308
1309 <para>
1310 GHC supports Concurrent Haskell by default, without requiring a
1311 special option or libraries compiled in a certain way.  To get access
1312 to the support libraries for Concurrent Haskell, just import
1313 <literal>Control.Concurrent</literal> (details are in the accompanying
1314 library documentation).</para>
1315
1316 <para>
1317 RTS options are provided for modifying the behaviour of the threaded
1318 runtime system.  See <XRef LinkEnd="parallel-rts-opts">.
1319 </para>
1320
1321 <para>
1322 Concurrent Haskell is described in more detail in the documentation
1323 for the <literal>Control.Concurrent</literal> module.
1324 </para>
1325
1326 </Sect1>
1327
1328 <Sect1 id="sec-using-parallel">
1329 <title>Using Parallel Haskell</title>
1330
1331 <para>
1332 <indexterm><primary>Parallel Haskell&mdash;use</primary></indexterm>
1333 </para>
1334
1335 <para>
1336 &lsqb;You won't be able to execute parallel Haskell programs unless PVM3
1337 (Parallel Virtual Machine, version 3) is installed at your site.&rsqb;
1338 </Para>
1339
1340 <para>
1341 To compile a Haskell program for parallel execution under PVM, use the
1342 <Option>-parallel</Option> option,<IndexTerm><Primary>-parallel
1343 option</Primary></IndexTerm> both when compiling <Emphasis>and
1344 linking</Emphasis>.  You will probably want to <Literal>import
1345 Parallel</Literal> into your Haskell modules.
1346 </Para>
1347
1348 <para>
1349 To run your parallel program, once PVM is going, just invoke it
1350 &ldquo;as normal&rdquo;.  The main extra RTS option is
1351 <Option>-qp&lt;n&gt;</Option>, to say how many PVM
1352 &ldquo;processors&rdquo; your program to run on.  (For more details of
1353 all relevant RTS options, please see <XRef
1354 LinkEnd="parallel-rts-opts">.)
1355 </para>
1356
1357 <para>
1358 In truth, running Parallel Haskell programs and getting information
1359 out of them (e.g., parallelism profiles) is a battle with the vagaries of
1360 PVM, detailed in the following sections.
1361 </para>
1362
1363 <Sect2 id="pvm-dummies">
1364 <Title>Dummy's guide to using PVM</Title>
1365
1366 <para>
1367 <indexterm><primary>PVM, how to use</primary></indexterm>
1368 <indexterm><primary>Parallel Haskell&mdash;PVM use</primary></indexterm>
1369 Before you can run a parallel program under PVM, you must set the
1370 required environment variables (PVM's idea, not ours); something like,
1371 probably in your <filename>.cshrc</filename> or equivalent:
1372
1373 <ProgramListing>
1374 setenv PVM_ROOT /wherever/you/put/it
1375 setenv PVM_ARCH `$PVM_ROOT/lib/pvmgetarch`
1376 setenv PVM_DPATH $PVM_ROOT/lib/pvmd
1377 </ProgramListing>
1378
1379 </para>
1380
1381 <para>
1382 Creating and/or controlling your &ldquo;parallel machine&rdquo; is a purely-PVM
1383 business; nothing specific to Parallel Haskell. The following paragraphs
1384 describe how to configure your parallel machine interactively.
1385 </Para>
1386
1387 <Para>
1388 If you use parallel Haskell regularly on the same machine configuration it
1389 is a good idea to maintain a file with all machine names and to make the
1390 environment variable PVM_HOST_FILE point to this file. Then you can avoid
1391 the interactive operations described below by just saying
1392 </Para>
1393
1394 <ProgramListing>
1395 pvm $PVM_HOST_FILE
1396 </ProgramListing>
1397
1398 <Para>
1399 You use the <Command>pvm</Command><IndexTerm><Primary>pvm command</Primary></IndexTerm> command to start PVM on your
1400 machine.  You can then do various things to control/monitor your
1401 &ldquo;parallel machine;&rdquo; the most useful being:
1402 </para>
1403
1404 <para>
1405 <InformalTable>
1406 <TGroup Cols=2>
1407 <ColSpec Align="Left">
1408 <TBody>
1409
1410 <row>
1411 <entry><KeyCombo><KeyCap>Control</KeyCap><KeyCap>D</KeyCap></KeyCombo></entry>
1412 <entry>exit <command>pvm</command>, leaving it running</entry>
1413 </row>
1414
1415 <row>
1416 <entry><command>halt</command></entry>
1417 <entry>kill off this &ldquo;parallel machine&rdquo; &amp; exit</entry>
1418 </row>
1419
1420 <row>
1421 <entry><command>add &lt;host&gt;</command></entry>
1422 <entry>add <command>&lt;host&gt;</command> as a processor</entry>
1423 </row>
1424
1425 <row>
1426 <entry><command>delete &lt;host&gt;</command></entry>
1427 <entry>delete <command>&lt;host&gt;</command></entry>
1428 </row>
1429
1430 <row>
1431 <entry><command>reset</command></entry>
1432 <entry>kill what's going, but leave PVM up</entry>
1433 </row>
1434
1435 <row>
1436 <entry><command>conf</command></entry>
1437 <entry>list the current configuration</entry>
1438 </row>
1439
1440 <row>
1441 <entry><command>ps</command></entry>
1442 <entry>report processes' status</entry>
1443 </row>
1444
1445 <row>
1446 <entry><command>pstat &lt;pid&gt;</command></entry>
1447 <entry>status of a particular process</entry>
1448 </row>
1449
1450 </TBody>
1451 </TGroup>
1452 </InformalTable>
1453 </para>
1454
1455 <para>
1456 The PVM documentation can tell you much, much more about <command>pvm</command>!
1457 </para>
1458
1459 </sect2>
1460
1461 <Sect2 id="par-profiles">
1462 <Title>Parallelism profiles</Title>
1463
1464 <para>
1465 <indexterm><primary>parallelism profiles</primary></indexterm>
1466 <indexterm><primary>profiles, parallelism</primary></indexterm>
1467 <indexterm><primary>visualisation tools</primary></indexterm>
1468 </para>
1469
1470 <para>
1471 With Parallel Haskell programs, we usually don't care about the
1472 results&mdash;only with &ldquo;how parallel&rdquo; it was!  We want pretty pictures.
1473 </para>
1474
1475 <Para>
1476 Parallelism profiles (&agrave; la <Command>hbcpp</Command>) can be generated with the
1477 <Option>-qP</Option><IndexTerm><Primary>-qP RTS option (concurrent, parallel)</Primary></IndexTerm> RTS option.  The
1478 per-processor profiling info is dumped into files named
1479 <Filename>&lt;full-path&gt;&lt;program&gt;.gr</Filename>.  These are then munged into a PostScript picture,
1480 which you can then display.  For example, to run your program
1481 <Filename>a.out</Filename> on 8 processors, then view the parallelism profile, do:
1482 </Para>
1483
1484 <Para>
1485
1486 <Screen>
1487 <prompt>&dollar;</prompt> ./a.out +RTS -qP -qp8
1488 <prompt>&dollar;</prompt> grs2gr *.???.gr &#62; temp.gr # combine the 8 .gr files into one
1489 <prompt>&dollar;</prompt> gr2ps -O temp.gr              # cvt to .ps; output in temp.ps
1490 <prompt>&dollar;</prompt> ghostview -seascape temp.ps   # look at it!
1491 </Screen>
1492
1493 </Para>
1494
1495 <para>
1496 The scripts for processing the parallelism profiles are distributed
1497 in <filename>ghc/utils/parallel/</filename>.
1498 </para>
1499
1500 </sect2>
1501
1502 <Sect2>
1503 <Title>Other useful info about running parallel programs</Title>
1504
1505 <Para>
1506 The &ldquo;garbage-collection statistics&rdquo; RTS options can be useful for
1507 seeing what parallel programs are doing.  If you do either
1508 <Option>+RTS -Sstderr</Option><IndexTerm><Primary>-Sstderr RTS option</Primary></IndexTerm> or <Option>+RTS -sstderr</Option>, then
1509 you'll get mutator, garbage-collection, etc., times on standard
1510 error. The standard error of all PE's other than the `main thread'
1511 appears in <filename>/tmp/pvml.nnn</filename>, courtesy of PVM.
1512 </para>
1513
1514 <para>
1515 Whether doing <option>+RTS -Sstderr</option> or not, a handy way to watch
1516 what's happening overall is: <command>tail -f /tmp/pvml.nnn</command>.
1517 </para>
1518
1519 </sect2>
1520
1521 <Sect2 id="parallel-rts-opts">
1522 <title>RTS options for Concurrent/Parallel Haskell
1523 </title>
1524
1525 <para>
1526 <indexterm><primary>RTS options, concurrent</primary></indexterm>
1527 <indexterm><primary>RTS options, parallel</primary></indexterm>
1528 <indexterm><primary>Concurrent Haskell&mdash;RTS options</primary></indexterm>
1529 <indexterm><primary>Parallel Haskell&mdash;RTS options</primary></indexterm>
1530 </para>
1531
1532 <para>
1533 Besides the usual runtime system (RTS) options
1534 (<XRef LinkEnd="runtime-control">), there are a few options particularly
1535 for concurrent/parallel execution.
1536 </para>
1537
1538 <para>
1539 <VariableList>
1540
1541 <VarListEntry>
1542 <Term><Option>-qp&lt;N&gt;</Option>:</Term>
1543 <ListItem>
1544 <Para>
1545 <IndexTerm><Primary>-qp&lt;N&gt; RTS option</Primary></IndexTerm>
1546 (PARALLEL ONLY) Use <Literal>&lt;N&gt;</Literal> PVM processors to run this program;
1547 the default is 2.
1548 </para>
1549 </listitem>
1550 </varlistentry>
1551 <varlistentry>
1552 <term><option>-C[&lt;us&gt;]</option>:</term>
1553 <listitem>
1554 <para>
1555 <indexterm><primary>-C&lt;us&gt; RTS option</primary></indexterm> Sets
1556 the context switch interval to <literal>&lt;s&gt;</literal> seconds.
1557 A context switch will occur at the next heap block allocation after
1558 the timer expires (a heap block allocation occurs every 4k of
1559 allocation).  With <option>-C0</option> or <option>-C</option>,
1560 context switches will occur as often as possible (at every heap block
1561 allocation).  By default, context switches occur every 20ms
1562 milliseconds.  Note that GHC's internal timer ticks every 20ms, and
1563 the context switch timer is always a multiple of this timer, so 20ms
1564 is the maximum granularity available for timed context switches.
1565 </para>
1566 </listitem>
1567 </varlistentry>
1568 <varlistentry>
1569 <term><option>-q[v]</option>:</term>
1570 <listitem>
1571 <para>
1572 <indexterm><primary>-q RTS option</primary></indexterm>
1573 (PARALLEL ONLY) Produce a quasi-parallel profile of thread activity,
1574 in the file <FIlename>&lt;program&gt;.qp</FIlename>.  In the style of <command>hbcpp</command>, this profile
1575 records the movement of threads between the green (runnable) and red
1576 (blocked) queues.  If you specify the verbose suboption (<option>-qv</option>), the
1577 green queue is split into green (for the currently running thread
1578 only) and amber (for other runnable threads).  We do not recommend
1579 that you use the verbose suboption if you are planning to use the
1580 <Command>hbcpp</Command> profiling tools or if you are context switching at every heap
1581 check (with <Option>-C</Option>).
1582 -->
1583 </Para>
1584 </ListItem>
1585 </VarListEntry>
1586 <VarListEntry>
1587 <Term><Option>-qt&lt;num&gt;</Option>:</Term>
1588 <ListItem>
1589 <Para>
1590 <IndexTerm><Primary>-qt&lt;num&gt; RTS option</Primary></IndexTerm>
1591 (PARALLEL ONLY) Limit the thread pool size, i.e. the number of concurrent
1592 threads per processor to <Literal>&lt;num&gt;</Literal>.  The default is
1593 32.  Each thread requires slightly over 1K <Emphasis>words</Emphasis> in
1594 the heap for thread state and stack objects.  (For 32-bit machines, this
1595 translates to 4K bytes, and for 64-bit machines, 8K bytes.)
1596 </Para>
1597 </ListItem>
1598 </VarListEntry>
1599 <!-- no more -HWL
1600 <VarListEntry>
1601 <Term><Option>-d</Option>:</Term>
1602 <ListItem>
1603 <Para>
1604 <IndexTerm><Primary>-d RTS option (parallel)</Primary></IndexTerm>
1605 (PARALLEL ONLY) Turn on debugging.  It pops up one xterm (or GDB, or
1606 something&hellip;) per PVM processor.  We use the standard <Command>debugger</Command>
1607 script that comes with PVM3, but we sometimes meddle with the
1608 <Command>debugger2</Command> script.  We include ours in the GHC distribution,
1609 in <Filename>ghc/utils/pvm/</Filename>.
1610 </Para>
1611 </ListItem>
1612 </VarListEntry>
1613 -->
1614 <VarListEntry>
1615 <Term><Option>-qe&lt;num&gt;</Option>:</Term>
1616 <ListItem>
1617 <Para>
1618 <IndexTerm><Primary>-qe&lt;num&gt; RTS option
1619 (parallel)</Primary></IndexTerm> (PARALLEL ONLY) Limit the spark pool size
1620 i.e. the number of pending sparks per processor to
1621 <Literal>&lt;num&gt;</Literal>. The default is 100. A larger number may be
1622 appropriate if your program generates large amounts of parallelism
1623 initially.
1624 </Para>
1625 </ListItem>
1626 </VarListEntry>
1627 <VarListEntry>
1628 <Term><Option>-qQ&lt;num&gt;</Option>:</Term>
1629 <ListItem>
1630 <Para>
1631 <IndexTerm><Primary>-qQ&lt;num&gt; RTS option (parallel)</Primary></IndexTerm>
1632 (PARALLEL ONLY) Set the size of packets transmitted between processors
1633 to <Literal>&lt;num&gt;</Literal>. The default is 1024 words. A larger number may be
1634 appropriate if your machine has a high communication cost relative to
1635 computation speed.
1636 </Para>
1637 </ListItem>
1638 </VarListEntry>
1639 <VarListEntry>
1640 <Term><Option>-qh&lt;num&gt;</Option>:</Term>
1641 <ListItem>
1642 <Para>
1643 <IndexTerm><Primary>-qh&lt;num&gt; RTS option (parallel)</Primary></IndexTerm>
1644 (PARALLEL ONLY) Select a packing scheme. Set the number of non-root thunks to pack in one packet to
1645 &lt;num&gt;-1 (0 means infinity). By default GUM uses full-subgraph
1646 packing, i.e. the entire subgraph with the requested closure as root is
1647 transmitted (provided it fits into one packet). Choosing a smaller value
1648 reduces the amount of pre-fetching of work done in GUM. This can be
1649 advantageous for improving data locality but it can also worsen the balance
1650 of the load in the system. 
1651 </Para>
1652 </ListItem>
1653 </VarListEntry>
1654 <VarListEntry>
1655 <Term><Option>-qg&lt;num&gt;</Option>:</Term>
1656 <ListItem>
1657 <Para>
1658 <IndexTerm><Primary>-qg&lt;num&gt; RTS option
1659 (parallel)</Primary></IndexTerm> (PARALLEL ONLY) Select a globalisation
1660 scheme. This option affects the
1661 generation of global addresses when transferring data. Global addresses are
1662 globally unique identifiers required to maintain sharing in the distributed
1663 graph structure. Currently this is a binary option. With &lt;num&gt;=0 full globalisation is used
1664 (default). This means a global address is generated for every closure that
1665 is transmitted. With &lt;num&gt;=1 a thunk-only globalisation scheme is
1666 used, which generated global address only for thunks. The latter case may
1667 lose sharing of data but has a reduced overhead in packing graph structures
1668 and maintaining internal tables of global addresses.
1669 </Para>
1670 </ListItem>
1671 </VarListEntry>
1672 </VariableList>
1673 </para>
1674
1675 </sect2>
1676
1677 </Sect1>
1678
1679   <sect1 id="options-platform">
1680     <title>Platform-specific Flags</title>
1681
1682     <indexterm><primary>-m* options</primary></indexterm>
1683     <indexterm><primary>platform-specific options</primary></indexterm>
1684     <indexterm><primary>machine-specific options</primary></indexterm>
1685
1686     <para>Some flags only make sense for particular target
1687     platforms.</para>
1688
1689     <variablelist>
1690
1691       <varlistentry>
1692         <term><option>-mv8</option>:</term>
1693         <listitem>
1694           <para>(SPARC machines)<indexterm><primary>-mv8 option (SPARC
1695           only)</primary></indexterm> Means to pass the like-named
1696           option to GCC; it says to use the Version 8 SPARC
1697           instructions, notably integer multiply and divide.  The
1698           similiar <option>-m*</option> GCC options for SPARC also
1699           work, actually.</para>
1700         </listitem>
1701       </varlistentry>
1702
1703       <varlistentry>
1704         <term><option>-monly-[32]-regs</option>:</term>
1705         <listitem>
1706           <para>(iX86 machines)<indexterm><primary>-monly-N-regs
1707           option (iX86 only)</primary></indexterm> GHC tries to
1708           &ldquo;steal&rdquo; four registers from GCC, for performance
1709           reasons; it almost always works.  However, when GCC is
1710           compiling some modules with four stolen registers, it will
1711           crash, probably saying:
1712
1713 <Screen>
1714 Foo.hc:533: fixed or forbidden register was spilled.
1715 This may be due to a compiler bug or to impossible asm
1716 statements or clauses.
1717 </Screen>
1718
1719           Just give some registers back with
1720           <option>-monly-N-regs</option>.  Try `3' first, then `2'.
1721           If `2' doesn't work, please report the bug to us.</para>
1722         </listitem>
1723       </varlistentry>
1724     </variablelist>
1725
1726   </sect1>
1727
1728 &runtime;
1729
1730 <sect1 id="ext-core">
1731   <title>Generating and compiling External Core Files</title>
1732
1733   <indexterm><primary>intermediate code generation</primary></indexterm>
1734
1735   <para>GHC can dump its optimized intermediate code (said to be in &ldquo;Core&rdquo; format) 
1736   to a file as a side-effect of compilation. Core files, which are given the suffix
1737   <filename>.hcr</filename>, can be read and processed by non-GHC back-end
1738   tools.  The Core format is formally described in <ulink url="http://www.haskell.org/ghc/docs/papers/core.ps.gz"
1739   <citetitle>An External Representation for the GHC Core Language</citetitle></ulink>, 
1740   and sample tools (in Haskell)
1741   for manipulating Core files are available in the GHC source distribution 
1742   directory <literal>/fptools/ghc/utils/ext-core</literal>.  
1743   Note that the format of <literal>.hcr</literal> 
1744   files is <emphasis>different</emphasis> (though similar) to the Core output format generated 
1745   for debugging purposes (<xref linkend="options-debugging">).</para>
1746
1747   <para>The Core format natively supports notes which you can add to
1748   your source code using the <literal>CORE</literal> pragma (see <xref
1749   linkend="pragmas">).</para>
1750
1751     <variablelist>
1752
1753         <varlistentry>
1754           <term><option>-fext-core</option></term>
1755           <indexterm>
1756             <primary><option>-fext-core</option></primary>
1757           </indexterm>
1758           <listitem>
1759             <para>Generate <literal>.hcr</literal> files.</para>
1760           </listitem>
1761         </varlistentry>
1762
1763     </variablelist>
1764
1765 <para>GHC can also read in External Core files as source; just give the <literal>.hcr</literal> file on
1766 the command line, instead of the <literal>.hs</literal> or <literal>.lhs</literal> Haskell source.
1767 A current infelicity is that you need to give teh <literal>-fglasgow-exts</literal> flag too, because
1768 ordinary Haskell 98, when translated to External Core, uses things like rank-2 types.</para>
1769 </sect1>
1770
1771 &debug;
1772 &flags;
1773
1774 </Chapter>
1775
1776 <!-- Emacs stuff:
1777      ;;; Local Variables: ***
1778      ;;; mode: sgml ***
1779      ;;; sgml-parent-document: ("users_guide.sgml" "book" "chapter") ***
1780      ;;; End: ***
1781  -->