A variant of Node in which Element nodes have an annotation of any type,
and some concrete functions that annotate with the XML parse location.
It is assumed you will usually want Tree or Annotated, not both, so many
of the names conflict.

Support for qualified and namespaced trees annotated with location information
is not complete.

NName has two components, a local part and an optional namespace. The local part is the
name of the tag. The namespace is the URI identifying collections of declared tags.
Tags with the same local part but from different namespaces are distinct. Unqualified tags
are those with no namespace. They are in the default namespace, and all uses of an
unqualified tag are equivalent.

Lazily parse XML to tree. Note that forcing the XMLParseError return value
will force the entire parse. Therefore, to ensure lazy operation, don't
check the error status until you have processed the tree.

Lazily parse XML to tree. Note that forcing the XMLParseError return value
will force the entire parse. Therefore, to ensure lazy operation, don't
check the error status until you have processed the tree.

parseThrowing can throw an exception from pure code, which is generally a bad
way to handle errors, because Haskell's lazy evaluation means it's hard to
predict where it will be thrown from. However, it may be acceptable in
situations where it's not expected during normal operation, depending on the
design of your program.

An abstraction for any string type you want to use as xml text (that is,
attribute values or element text content). If you want to use a
new string type with hexpat, you must make it an instance of
GenericXMLString.