       #=> [a: 3, b: 2, d: 4]
 
   """
+  @spec merge(t, t), do: t
   def merge(dict1, dict2) do
     merge(dict1, dict2, fn(_k, _v1, v2) -> v2 end)
   end

  @doc """
  Returns an empty dict of the same type as `dict`.
  """
  def empty(dict) do
    elem(dict, 0).empty(dict)
  end

      #=> [a: 3, b: 2]

  """
  @spec put(t, key, value), do: t
  def put(dict, key, val) do
    elem(dict, 0).put(dict, key, val)
  end
