sig
  val urldecode : string -> string
  val urlencode : ?with_plus:bool -> string -> string
  type http_url = {
    hu_host : string;
    hu_port : int;
    hu_path : string list;
    hu_path_string : string;
    hu_arguments : (string * string) list;
    hu_fragment : string;
  }
  type file_url = {
    fu_path : string list;
    fu_path_string : string;
    fu_arguments : (string * string) list;
    fu_fragment : string;
  }
  type url =
      Http of Url.http_url
    | Https of Url.http_url
    | File of Url.file_url
  val default_http_port : int
  val default_https_port : int
  val path_of_path_string : string -> string list
  val encode_arguments : (string * string) list -> string
  val decode_arguments : string -> (string * string) list
  val url_of_string : string -> Url.url option
  val string_of_url : Url.url -> string
  module Current :
    sig
      val host : string
      val port : int option
      val path_string : string
      val path : string list
      val arguments : (string * string) list
      val get_fragment : unit -> string
      val set_fragment : string -> unit
      val get : unit -> Url.url option
      val set : Url.url -> unit
      val as_string : string
    end
end