type uri =
  { scheme : string option; authority : authority option; path : string;
    query : string option; fragment : string option
  }
  and authority =
  { host_kind : host_kind; host : string; port : int option;
    userinfo : string option
  }
  and host_kind =
  | Reg_name | IPv4address | IP_literal