   @doc """
   Get all keys in the dict.
   """
-  @spec keys(t) :: list(key :: term)
   def keys(dict) do
     dict_fold(dict, [], fn { k, _ }, acc -> [k|acc] end)
   end

  @doc """
  Deletes a value from the dict.
  """
  @spec delete(t, key :: term) :: t
  def delete(ordered(bucket: bucket, size: size) = dict, key) do
    case bucket_delete(bucket, key) do
      { _, 0 } ->

      #=> HashDict[a: 1, b: 2]

  """
  @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)
