   binary. It also does percent-unescaping of both keys and values.
 
   Use `query_decoder/1` if you want to iterate over each value manually.
+
+  ## Examples
+  
+      iex(23)> URI.decode_query("foo=1&bar=2")
+      #HashDict<[{"bar", "2"}, {"foo", "1"}]>
+
+      iex> hd = HashDict.new()
+      #HashDict<[]>
+      iex> URI.decode_query("foo=1&bar=2", hd) |> HashDict.keys
+      ["bar", "foo"]
+      iex> URI.decode_query("foo=1&bar=2", hd) |> HashDict.values
+      ["2", "1"]
+
   """
   def decode_query(q, dict // HashDict.new) when is_binary(q) do
     Enum.reduce query_decoder(q), dict, fn({ k, v }, acc) -> Dict.put(acc, k, v) end

  which takes no arguments and returns the default port
  for that particular scheme. Take a look at `URI.HTTPS` for an
  example of one of these extension modules.
  """
  def parse(s) when is_binary(s) do
    # From http://tools.ietf.org/html/rfc3986#appendix-B

  @doc """
  Returns an iterator function over the query string that decodes
  the query string in steps.
    
  ## Examples
  
      iex> URI.query_decoder("foo=1&bar=2") |> Enum.map &(&1)
      [{"foo", "1"}, {"bar", "2"}]
    
  """
  def query_decoder(q) when is_binary(q) do
    fn(acc, fun) ->
