anchor.diff:      false -> remove_entry(Rest, Key, [{K, V} | Acc])
     end.
   
  --spec do_equiv([entry()], mappings()) -> boolean().
  +-spec do_equiv([entry()], mapping()) -> boolean().
   do_equiv([], _) ->
     true;
   do_equiv([{Hash, {K, V}} | Rest], MapSet) ->
  
positive.code:     _ -> {1, {Key, Value}}
    end.
  
  -spec without_entry(map(), integer(), any()) -> {-1 | 0, map()}.
  without_entry(Map, Hash, Key) ->
    case Map of
      #{Hash := {_, _}} -> {-1, maps:remove(Hash, Map)};
      #{Hash := KVs0}   ->
        case remove_entry(KVs0, Key, []) of
          {Diff, []}   -> {Diff, maps:remove(Hash, Map)};
          {Diff, KVs1} -> {Diff, Map#{Hash => KVs1}}
        end;
      _ -> {0, Map}
    end.
  
  -spec equiv(map(), map()) -> boolean().
  equiv(MapX, MapY) ->
    do_equiv(maps:to_list(MapX), MapY).
  
  %%------------------------------------------------------------------------------
  %% Helper functions
  
negative.code: %% @doc Hash collision handling for data structures.
  %%
  %% Implements utility functions for dealing with the collision of
  %% hashes in data structures such as Clojure maps and sets.
  -module(clj_hash_collision).
  
  -include("clojerl.hrl").
  