This module defines functions for handling URIs. It presents substantially the
same interface as the older GHC Network.URI module, but is implemented using
Parsec rather than a Regex library that is not available with Hugs. The internal
representation of URI has been changed so that URI strings are more
completely preserved when round-tripping to a URI value and back.

The long-standing official reference for URI handling was RFC2396 [1],
as updated by RFC 2732 [2], but this was replaced by a new specification,
RFC3986 [3] in January 2005. This latter specification has been used
as the primary reference for constructing the URI parser implemented
here, and it is intended that there is a direct relationship between
the syntax definition in that document and this parser implementation.

Returns a new URI which represents the relative location of
the first URI with respect to the second URI. Thus, the
values supplied are expected to be absolute URIs, and the result
returned may be a relative URI.

Operations on URI strings

Support for putting strings into URI-friendly
escaped format and getting them back again.
This can't be done transparently in all cases, because certain
characters have different meanings in different kinds of URI.
The URI spec [3], section 2.4, indicates that all URI components
should be escaped before they are assembled as a URI:
"Once produced, a URI is always in its percent-encoded form"

Returns True if the character is an "unreserved" character in
a URI. These characters do not need to be escaped in a URI. The
only characters allowed in a URI are either "reserved",
"unreserved", or an escape sequence (% followed by two hex digits).