Use

You can colourise a Haskell source file for either ANSI terminal codes
(option -tty), or HTML 3.2 with font tags (option
-html), or HTML 4.01 output with CSS (option -css), or
for XHTML 1.0 with inline CSS styling (option -icss), or for
LaTeX (option -latex), or for IRC (option -mirc). The
default is for terminal output.

If no file argument is given, it reads standard input. Output is
written to file OUTPUT (option -o), defaulting to stdout. Multiple input
files will be concatenated to the same output.

HsColour can add named anchors in HTML (option -anchor) to
top-level definitions in the source file (functions, datatypes,
classes). This enables you to make links to a specific location in the
generated file with the standard file.html#anchor notation
(e.g. from haddock-generated
library documentation). See below for details.

If an input file is literate, that is, it has a suffix ".lhs" or ".ly"
or ".lx", then only the code fragments will be colourised, leaving the
commentary untouched. You can explicitly override this
filename-guessing of literate status: use the -lit option to
force literate colouring, or -nolit to force all text to be
colourised. (-lit-tex is an obsolete synonym for -lit)

For more advanced usage, if you are building documents in parts, and
you want to embed several individual colourised fragments into a
larger document, use the -partial option with each
fragment, to omit the HTML DOCTYPE header, CSS stylesheet link, or LaTeX
prologue.

Configuration of colours

If you use any output-format choice except -css, you can configure the
colours for different lexical entities by editing a configuration file
called .hscolour in the current directory.
(An example is included in the distribution.)
For (non-inline) CSS output, it is sufficient to edit the
hscolour.css file, also in the
distribution. (An alternative choice is supplied as
emacs.css.) The -print-css option
prints out the default CSS definitions, in case you lose the .css file.

The .hscolour file format is a simple Haskell value of type
ColourPrefs, constructed using named fields, as follows:

Use it as a library

If you want to incorporate hscolour-like functionality into your own
Haskell program, it is now (from 1.4) also available as a library,
thanks to Björn Bringert. The library is Cabal-ised, so just do
the usual thing to install it as a package:

Using HsColour with Haddock

Let's say you want to generate some pretty-coloured HTML versions of
your source files, at the same time as you are generating library
documentation using Haddock.
Haddock (0.8 onwards) has options to link the API docs to the source
code itself. Here is a quick summary of the shell commands to use:

Copyright and licence

Shortcomings

HsColour is not yet able to add anchors to class methods, nor to
foreign decls.

Alternatives

The
Programatica project has a more sophisticated HTML
syntax-highlighter. It hyperlinks every usage of an identifier to its
definition, which is highly useful for browsing large amounts of code.
However, it is a more heavyweight solution as well - requiring the
entire front-end of a compiler not only to parse the Haskell code, but
to chase all its module dependencies as well. As a consequence, you need
source access to every definition used in your program, including the
Prelude and all library packages...