key() :: any()
pri() :: any()
t()
token()
val() :: non_neg_integer()
add(t(), pri(), key(), val()) :: t()
delete(t(), token(), key()) :: t()
empty?(t()) :: boolean()
get_by_key(t(), key()) :: val()
mapping(t(), key()) :: {token() | nil, val() | nil}
new() :: t()
pop(t()) :: {pri(), key(), t()}