index() :: non_neg_integer()
ref(tag) :: {tag, index()}
t(tag, val) :: %Ruler.State.RefMap{ storage: %{required(ref(tag)) => val}, tag: tag, unused_keys: [ref(tag)] }
fetch!(t(tag, val), ref(tag)) :: val when tag: atom(), val: var
get(t(tag, val), ref(tag)) :: val | nil when tag: atom(), val: var
insert(t(tag, val), val) :: {t(tag, val), ref(tag)} when tag: atom(), val: var
keys(t(tag, any())) :: [ref(tag)] when tag: atom()
new(tag) :: t(tag, any()) when tag: atom()
new(tag, val) :: t(tag, val) when tag: atom(), val: var
remove(t(tag, val), ref(tag)) :: t(tag, val) when tag: atom()
update!(t(tag, val), ref(tag), (val -> val)) :: t(tag, val) when tag: atom(), val: var
update_and_fetch!(t(tag, val), ref(tag), (val -> val)) :: {t(tag, val), val} when tag: atom(), val: var