anchor.diff:  %% clojerl.IAssociative
   
   contains_key(#{?TYPE := ?M, map := Map}, Key) ->
  -  maps:is_key(clj_rt:hash(Key), Map).
  +  ?NIL /= get_entry(Map, clj_rt:hash(Key), Key).
   
   entry_at(#{?TYPE := ?M, map := Map}, Key) ->
     Hash = clj_rt:hash(Key),
  -  case maps:is_key(Hash, Map) of
  -    true ->
  -      {KeyFound, Val} = maps:get(Hash, Map),
  -      clj_rt:vector([KeyFound, Val]);
  -    false -> ?NIL
  +  case get_entry(Map, Hash, Key) of
  +    ?NIL -> ?NIL;
  +    {K, V} -> 'clojerl.Vector':?CONSTRUCTOR([K, V])
     end.
   
   assoc(#{?TYPE := ?M, map := Map} = M, Key, Value) ->
     Hash = clj_rt:hash(Key),
  -  {Key1, _} = maps:get(Hash, Map, {Key, Value}),
  -  M#{map => Map#{Hash => {Key1, Value}}}.
  +  Entry = create_entry(Map, Hash, Key, Value),
  +  M#{map => Map#{Hash => Entry}}.
   
   %% clojerl.ICounted
   
   count(#{?TYPE := ?M, map := Map}) ->
  -  maps:size(Map).
  +  F = fun
  +        (_, {_, _}, Count) -> Count + 1;
  +        (_, KVs, Count)    -> Count + length(KVs)
  +      end,
  +  maps:fold(F, 0, Map).
   
   %% clojerl.IEquiv
   
  
positive.code: 
  %% @private
  -spec build_mappings({any(), any()}, mappings()) -> mappings().
  build_mappings({K, _} = KV, Map) ->
    KHash = clj_rt:hash(K),
    Map#{KHash => KV}.
  
  %%------------------------------------------------------------------------------
  %% Protocols
  
negative.code: -type mappings() :: {map(), map()}.
  
  -type type() :: #{ ?TYPE => ?M
                   , map   => #{integer() => {any(), any()} | [{any(), any()}]}
                   , meta  => ?NIL | any()
                   }.
  
  