2. Document layout

The GHC documentation is written using DocBook 3.1, so the DTD line should be:

<!DOCTYPE Article PUBLIC "-//OASIS//DTD DocBook V3.1//EN">

This guide is not meant to teach you how to write DocBook; read the DocBook book for that. It is more of a reference than a tutorial, so see the DocBook home page for other links.

However, by popular demand, here are some useful points:

The rest of this section outlines the use of several tags which may not be obvious (DocBook is rather scholastic in style: it has tags for many things from C function prototypes to keyboard bindings; at the same time it has many omissions and oddities). The current scheme has many infelicities, partly because it was dreamt up in a hurry while the author was learning DocBook and converting the documentation thereto, and partly because DocBook is rather C-centric.

Comments

Comments in SGML look like this: <!--This is a comment-->.

<Command>

Used for commands typed into interactive sessions (e.g. cp foo bar and the names of programs such as gmake.

<Constant>

Used for system constants such as U_MAXINT and Makefile variables like SRC_FILES (because they are usually constant for a given run of make, and hence have a constant feel to them).

<Email>

For email addresses. This is a tag that's easy to overlook if you don't know it's there.

<Filename>

Used for paths, filenames, file extensions.

<Function>

Used for functions and constructors.

<IndexTerm>

The normal way to mark up an index term is <IndexTerm><Primary>term</Primary></IndexTerm>.

<KeyCap>, <KeyCombo>

Some more tags you may miss. Used for combinations such as Control-D.

<Literal>

Used for everything that should appear in typewriter font that has no other obvious tag: types, monads, small snippets of program text that are formatted inline, and the like.

<Option>

Used for compiler options and similar.

<ProgramListing>

For displayed program listings (including shell scripts).

<Screen>

For displayed screen dumps, such as portions of shell interaction. It's easy to tell the difference between these and shell scripts: the latter lack a shell prompt.

<VarName>

Used for variables, but not type variables.