Add .gitignore.

This is already on the main branch but I chose the base for my branch
at a point before it was created.  I did this, because this  version of
the repo (roughly) matches the version which was in darcs, when I last
merged my changes so, hopefully, I can import my darcs patches without
problems.
Remember that these files are executable.
Fix example comment.
Fix comment.
Add a missing ASSERT.
Treat type operators as constants, not variables.

Modifies the parser to treat all infix operators at the type level
as constants, not type variables.

This allows us to make definitions such as this:

>  data a + b = Test

Change to import/exports
~~~~~~~~~~~~~~~~~~~~~~~~

With this change, writing (+) in an import/export specification is
ambiguous because it is not clear if we should be importing/exporting
the value level (+) or the type level one, or both.

We solve this as follows:

- Specifications which have subrodinates are aways types.
  For example, T(), F(..), and (+)() all refer to types.

- Specification which do not have subbordinates remain unchanged:
  - variable names refer to values:   f, (+)
  - constructor names refer to types: T, F, (:+)

- Because (+)() looks odd, we also add a bit of new syntax.  Writing:

> type (+)

is an abbreviation for:

> (+)()

(i.e., it imports/exports a type or class without any of its subordinates).

To avoid clutter, we also allow multiple type/class constructors to be
mentioned in a single 'type' specificatoin.  For example:

>  type (+) (-) TypeNat

imports/exports all of the specified types/classes.
Add basic support for number type literals.

We add a new kind, Nat, inhabited by a family of types,
one for each natural number:

0, 1, 2 .. :: Nat

In terms of GHC's sub-kind relation, Nat is only a sub-kind of itself.

The numeric types are empty because there are no primitives of these
types, and the kind "Nat" is not related to *, the kind of types which
can be defined in Haskell programs.
Add some operations on type-level naturals.

The core of the work happens in module TcTypeNats (a new module).
Merge branch 'master' into type-nats

Conflicts:
	compiler/typecheck/TcMType.lhs
	compiler/typecheck/TcSMonad.lhs
Change permissions.
Make sure we don't drop derived goals (temporary).

Currently, I don't fully understand the role of "derived constraints",
so this is just a place-holder until I can figure out what is the
correct behavior.
Merge branch 'master' into type-nats

Conflicts:
	compiler/main/DynFlags.hs
Rename class 'TypeNat' to 'NatI'.

NatI is meant to suggest "implicit" natural number parameter,
or "introduction" for Nat.

I am not sure if this is a good idea, but the 'Type' part of the TypeNat
did not seem to convey any useful information.
Improve reasoning about ordering to support transitivity and anti-symmetry.
Merge branch 'master' into type-nats

Conflicts:
	compiler/typecheck/TcType.lhs
An idea about dealing with associative operators.
Refactor a bit and report errors due to impossible constraints.
Yet another variation on associativity.
Cancelation and associativity.

This helps with some of the GADT style examples.
Currently, the code is rather inefficient but it the idea was to
see if it will work at all.
Merge remote branch 'origin/master' into type-nats