     root: @node_template
 
 
-  @typep ordered :: {HashDict, size :: non_neg_integer, [{key :: term, value :: term}]}
-  @typep trie :: {HashDict, size :: non_neg_integer, depth :: non_neg_integer,
-                            expand_on :: non_neg_integer, contract_on :: non_neg_integer,
-                            root :: tuple}
-  @opaque t :: ordered | trie
-
   import Bitwise
 
   # Let's inline common instructions

  @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 } ->

  Gets the value under key from the dict,
  raises KeyError if such key does not exist.
  """
  def get!(dict, key) when is_tuple(dict) do
    case dict_get(dict, key) do
      { ^key, value } -> value
