.TH NHC98 1 local
.SH NAME
nhc98 \- a compiler for Haskell 98
.SH SYNOPSIS
.B nhc98
[ option ] files
.SH DESCRIPTION
The syntax of
.I nhc98
programs is described in the Haskell 98 report.
.PP
This manual page is incomplete and probably somewhat out-of-date. See
the supplied html documentation (default location /usr/doc/nhc98) for
full details of your local installation, or visit
.I http://www.cs.york.ac.uk/fp/nhc98/
for the latest details.
.PP
.I nhc98
accepts several types of arguments:
.br
Arguments whose names end in `.hs' are taken to be Haskell source,
names ending in `.lhs' are taken to be literate Haskell source,
names ending in `.gc' are taken to be GreenCard source,
names ending in `.hc' are taken to be
.I nhc98
bytecode,
names ending in `.c' are taken to be straight C code,
names ending in `.s' are taken to be assembler programs
and `.o' are object files.
.PP
The following options are interpreted by
.I nhc98
.TP
.B \-C
Suppress the loading phase and force a bytecode file to be produced.
.TP
.B \-S
Suppress the loading phase and force an assembler file to be produced.
.TP
.B \-c
Suppress the loading phase and force an object file to be produced.
.TP
.BI \-o " output"
Name the output file
.IR output .
.TP
.BI \-I "path/"
Prepend
.I path
to the list of paths used to locate interface files. The
.I path
should be a directory. Nhc98 will try to link with
.I path/$MACHINE/lib.a,
or if it does not exist with
.I path/lib.a
(
.I libp.a
is used instead of
.I lib.a
when linking code for heap profiling, and likewise
.I libt.a
for time profiling, and
.I libT.a
for tracing).
.TP
.B \-[lL]*
Extra libraries that are sent directly to the linker.
.TP
.B \-p
Emit code that enables heap profiling.
Additional flags (see below) are needed when the program is run.
Use hp2graph to get a PostScript file.
.TP
.B \-t
Emit code that enables time profiling.
Additional run-time flags are needed to guide the profile.
.TP
.B \-T
Emit code that enables tracing.
Additional compile-time flags (see below) can be given to guide the
progress of tracing.
.TP
.B \-cpp
run the C preprocessor before compilation.
.TP
.B \-v
be verbose.
.TP
.B \--version
report which compiler version is installed.
.TP
.B \+RTS
Interpret arguments as flags to the compilers runtime system, until
.I \-RTS
or all arguments are interpreted.
.TP
.B \+CTS
Interpret arguments as flags to the compiler, until
.I \-CTS
or all arguments are interpreted. Useful to force arguments that
starts with
.I -l
to the compiler instead of the linker.
.PP
When the program is run it interprets the following flags:
.TP
.B \+RTS
Interpret arguments as flags to the runtime system until
.I \-RTS
or all arguments are interpreted.
.PP
The runtime flags are:
.br
.TP 10
.BI \-Hsize
set the heapsize to
.IR size .
Default is 400kbyte.
.TP 10
.BI \-Ksize
set the stacksize to
.IR size .
Default is 80kbyte.
.TP
.B \-B
makes the bell sound at each garbage collection.
.PP
If the program is compiled with
.I \-p
then additional runtime flags are available. The first occurence of
.I \-p, \-m, \-c, \-r, \-b
or
.I \-l
determines which kind of heap profile that should be produced. Only
.I \-r
can take an argument in this case (the size when retainer sets should
be approximated with everyone). Later occurrences restrict the profile to nodes
that match the arguments.
.TP
\fB\-p[p1:...]\fP
Heap profiling by
.I producer
(function).
.TP
\fB\-m[m1:...]\fP
Heap profiling by
.I module.
.TP
\fB\-c[c1:...]\fP
Heap profiling by
.I construction.
.TP
\fB\-r[r1:...]\fP
Heap profiling by
.I retainer.
.TP
\fB\-b[lag|use|drag|void]\fP
.I Biographical
heap profiling.
.TP
\fB\-l[[low]-[high]]\fP
Heap profiling by
.I lifetime.
.TP
.B \-@
Count apply nodes as retainers.
.PP
There may be more flags (they multiply).
.SH ENVIRONMENT
The environment variables NHC98LIBDIR and NHC98INCDIR are used to find the
various files used by the compiler. The default values are
/usr/local/lib/nhc98 and /usr/local/include/nhc98. The variable $MACHINE
is used to select the correct executables and libraries for your architecture.
It is determined using the script
.I harch
.SH FILES
.TP 25
.B $NHC98LIBDIR/$MACHINE/nhc98comp
the compiler.
.TP
.B $NHC98INCDIR/*.hi
interface files.
.TP
.B $NHC98LIBDIR/$MACHINE/Runtime[ptT]?.o
part of the runtime system.
.TP
.B $NHC98LIBDIR/$MACHINE/Runtime[ptT]?.a
the rest of the runtime system.
.TP
.B $NHC98LIBDIR/$MACHINE/Prelude[ptT]?.a
the standard prelude and libraries.
.SH DIAGNOSTICS
Could be better, could be worse.
.SH "SEE ALSO"
hmake(1), hp2graph(1), harch(1)
.SH BUGS
Probably.
.br
Make sure that the function called "main" in module Main has the type
.I IO ()
as the compiler won't tell you if you get it wrong!
|