This is a guide to using the Glasgow Haskell compilation (GHC) system. It is a batch compiler for the Haskell 1.4 language, with support for various Glasgow-only extensions.
Many people will use GHC very simply: compile some
modules---ghc -c -O Foo.hs Bar.hs
; and link them---
ghc -o wiggle -O Foo.o Bar.o
.
But if you need to do something more complicated, GHC can do that, too:
ghc -c -O -fno-foldr-build -dcore-lint -fvia-C -ddump-simpl Foo.lhs
Stay tuned---all will be revealed!
In this document, we assume that GHC has been installed at your site
as ghc
. The rest of this section provide some tutorial information
on batch-style compilation; if you're familiar with these concepts
already, then feel free to skip to the next section.
The Glorious Haskell Compilation System, as with most UNIX (batch) compilation systems, has several interacting parts:
ghc
---which you
usually think of as ``the compiler''---is a program that merely
invokes/glues-together the other pieces of the system (listed below),
passing the right options to each, slurping in the right libraries,
etc.
unlit
that extracts Haskell
code from a literate script; used if you believe in that sort of
thing.
hscpp
,
only needed by people requiring conditional
compilation, probably for large systems. The ``Haskellised'' part
just means that #line
directives in the output have been
converted into proper Haskell {-# LINE ... -
} pragmas.
You must give an explicit -cpp
option
for the C pre-processor to be invoked.
hsc
,
which---in normal use---takes its input from the C pre-processor
and produces assembly-language output (sometimes: ANSI C output).
hsc
's C output into assembly language for a particular
target architecture. In fact, the only C compiler we currently
support is gcc
, because we make use of certain extensions to the
C language only supported by gcc. Version 2.x is a must; we recommend
version 2.7.2.1 for stability (we've heard both good and bad reports
of later versions).
as
.
ld
.
You invoke the Glasgow Haskell compilation system through the
driver program ghc
.
For example, if you had typed a
literate ``Hello, world!'' program into hello.lhs
, and you then
invoked:
ghc hello.lhs
the following would happen:
hello.lhs
is run through the literate-program
code extractor unlit
, feeding its output to
hsc
, which produces
input for
a.out
.You have considerable control over the compilation process. You feed
command-line arguments (call them ``options,'' for short) to the
driver, ghc
; the ``types'' of the input files (as encoded in
their names' suffixes) also matter.
Here's hoping this is enough background so that you can read the rest of this guide!
On the World-Wide Web, there are several URLs of likely interest:
We run two mailing lists about Glasgow Haskell. We encourage you to join, as you feel is appropriate.
This list is for GHC users to chat among themselves. Subscribe by sending mail to majordomo@haskell.org, with a message body (not header) like this:
subscribe glasgow-haskell-users MyName <m.y.self@@bigbucks.com>
(The last bit is your all-important e-mail address, of course.)
To communicate with your fellow users, send mail to glasgow-haskell-users@haskell.org.
To contact the list administrator, send mail to glasgow-haskell-users-request@haskell.org. An archive of the list is available on the Web: glasgow-haskell-users mailing list archive.
Send bug reports for GHC to this address! The sad and lonely people who subscribe to this list will muse upon what's wrong and what you might do about it.
Subscribe via majordomo@haskell.org with:
subscribe glasgow-haskell-bugs My Name <m.y.self@@hackers.r.us>
Again, you may contact the list administrator at glasgow-haskell-bugs-request@haskell.org. And, yes, an archive of the list is available on the Web at: : glasgow-haskell-bugs mailing list archive
There is also the general Haskell mailing list. Subscribe by sending email to majordomo@dcs.gla.ac.uk, with the usual message body:
subscribe haskell My Name <m.y.self@@fp.rules.ok.org>
Some Haskell-related discussion takes place in the Usenet newsgroup
comp.lang.functional
. (But note: news is basically dead at Glasgow.
That's one reason Glaswegians aren't too active in c.f.l.)
The main anonymous-FTP site for Glasgow Haskell is ftp://ftp.dcs.gla.ac.uk/pub/haskell/glasgow. ``Important'' bits are mirrored at other Haskell archive sites (and we have their stuff, too).
Weak
library changes:
finalize
now runs the finalizer immediately, and
waits for it to complete before returning.mkWeak
now takes a Maybe (IO ())
for the finalizer,
and mkWeakNoFinalizer
is removed.Integer
type to speed up
computations on small integers. The performance of Integer
is now
only slightly slower than Int
for values between minBound::Int
and maxBound::Int
.
-funbox-strict-fields
for unboxing/unpacking strict
constructor fields.
fptools/ghc/LICENSE/
.
<keving@cs.mu.OZ.AU>
).
Concurrent.yield :: IO ()
.
__HASKELL98__
when compiling files with
-cpp
.
hppa1.1-hp-hpux
port reinstated.
unsafeThaw{Byte,ST,IO}Array
.
mkdependHS
now lives in GHC's lib directory, not the
binary directory. It isn't intended to be run standalone, only via
ghc -M
.
Exception.killThread
now raises an exception
(AsyncException.KilledThread
) in the killed thread.Exception.raiseInThread
allows a thread to raise an
exception in another thread.Concurrent.myThreadId
returns the ThreadId
of the
calling thread.AsyncException.StackOverflow
being raised in the offending thread.AssertionFailed
exception.
forkIO
now handles any uncaught exceptions cleanly.
integer2Int#
isn't sign preserving any longer, but modulo
(maxBound::Int + 1) * 2
.
-ddump-rdr
is now called -ddump-parsed
.
Posix
library now works.