Documentation

A name is a non-empty list of alternating Ids and Holes. A normal name
is represented by a singleton list, and operators are represented by a list
with Holes where the arguments should go. For instance: [Hole,Id +,Hole]
is infix addition.

Equality and ordering on Names are defined to ignore range so same names
in different locations are equal.

QName is a list of namespaces and the name of the constant.
For the moment assumes namespaces are just Names and not
explicitly applied modules.
Also assumes namespaces are generative by just using derived
equality. We will have to define an equality instance to
non-generative namespaces (as well as having some sort of
lookup table for namespace names).