       #=> HashDict[a: 1, b: 2]
 
   """
-  @spec new([{term :: term, value :: term}]) :: t
+  @spec new(list({key :: term, value :: term})) :: Dict.t
   def new(pairs) do
     Enum.reduce pairs, ordered(), fn { k, v }, dict ->
       put(dict, k, v)

  @doc """
  Merges two dictionaries.
  """
  @spec merge(t, t | Dict.t) :: t
  @spec merge(t, t | Dict.t, ((key :: term, value1 :: term, value2 :: term) -> value :: term)) :: t
  def merge(dict, enum, callback // fn(_k, _v1, v2) -> v2 end)

  def merge(dict1, dict2, callback) when is_record(dict1, HashDict) and is_record(dict2, HashDict) and elem(dict1, 1) < elem(dict2, 1) do

  @doc """
  Returns an empty dict.
  """
  def empty(_) do
    ordered()
  end
