+<ul>
+ <li>Build the software, if necessary. Unless you're just working on documentation, you'll
+ probably want to build the software in order to test any changes you make. For GHC,
+ instructions can be found in the GHC installation guide.</li>
+ <li>Make changes. Preferably small ones first.</li>
+ <li>Test them. You can see exactly what changes you've made by using the <tt>cvs diff</tt>
+ command. For example, <pre> $ cvs diff</pre>
+ <p>lists all the changes (using the <tt>diff</tt> command) in and below the current
+ directory. In emacs, C-c C-v C-= runs <tt>cvs diff</tt> on the current buffer and shows
+ you the results.</p>
+ </li>
+ <li>Before checking in a change, you need to update your source tree:</li>
+ <pre> $ cd fptools
+ $ cvs update</pre>
+ <p>This pulls in any changes that other people have made, and merges them with yours. If
+ there are any conflicts, CVS will tell you, and you'll have to resolve them before you can
+ check your changes in. The documentation describes what to do in the event of a conflict. </p>
+ <p>It's not always necessary to do a full cvs update before checking in a change, since
+ CVS will always tell you if you try to check in a file that someone else has changed.
+ However, you should still update at regular intervals to avoid making changes that don't
+ work in conjuction with changes that someone else made. Keeping an eye on what goes by on
+ the mailing list can help here. <br>
+ <br>
+ </p>
+ <li>When you're happy that your change isn't going to break anything, check it in. For a
+ one-file change:</li>
+ <pre> $ cvs commit <filename></pre>
+ <p>CVS will then pop up an editor for you to enter a "commit message", this is
+ just a short description of what your change does, and will be kept in the history of the
+ file. </p>
+ <p>If you're using emacs, simply load up the file into a buffer and type C-x C-q, and
+ emacs will prompt for a commit message and then check in the file for you. </p>
+ <p>For a multiple-file change, things are a bit trickier. There are several ways to do
+ this, but this is the way I find easiest. First type the commit message into a temporary
+ file. Then either </p>
+ <pre> $ cvs commit -F <commit-message> <file_1> .... <file_n></pre>
+ <p>or, if nothing else has changed in this part of the source tree, </p>
+ <pre> $ cvs commit -F <commit-message> <directory></pre>
+ <p>where <directory> is a common parent directory for all your changes, and
+ <commit-message> is the name of the file containing the commit message. </p>
+ <p>Shortly afterwards, you'll get some mail from the relevant mailing list saying which
+ files changed, and giving the commit message. For a multiple-file change, you should still
+ get only *one* message.</p>
+</ul>