isUnescapedInURI documentation says:
Returns True if the character is allowed unescaped in a URI.
However, its implementation is:
isUnescapedInURI c = isReserved c || isUnreserved c
where isReserved documentation says:
Returns True if the character is a "reserved" character in a URI. To include a literal instance of one of these characters in a component of a URI, it must be escaped.
So, it seems to me that if isReserved returns True, then isUnescapedInURI ought to return False.