anchor.diff:      V :: term().
   
   fold(Fun,Init,Map) when is_function(Fun,3), is_map(Map) ->
  -    lists:foldl(fun({K,V},A) -> Fun(K,V,A) end,Init,maps:to_list(Map));
  +    fold_1(Fun, Init, iterator(Map));
   fold(Fun,Init,Map) ->
       erlang:error(error_type(Map),[Fun,Init,Map]).
  +
  +fold_1(Fun, Acc, Iter) ->
  +    case next(Iter) of
  +        {K, V, NextIter} ->
  +            fold_1(Fun, Fun(K,V,Acc), NextIter);
  +        none ->
  +            Acc
  +    end.
   
   -spec map(Fun,Map1) -> Map2 when
       Fun :: fun((K, V1) -> V2),
  
positive.code: 
  with(Ks,Map1) when is_list(Ks), is_map(Map1) ->
      Fun = fun(K, List) ->
        case ?MODULE:find(K, Map1) of
            {ok, V} ->
                [{K, V} | List];
            error ->
                List
        end
      end,
      ?MODULE:from_list(lists:foldl(Fun, [], Ks));
  with(Ks,M) ->
      erlang:error(error_type(M),[Ks,M]).
  
  
negative.code:     K :: term().
  
  without(Ks,M) when is_list(Ks), is_map(M) ->
      lists:foldl(fun(K, M1) -> maps:remove(K, M1) end, M, Ks);
  without(Ks,M) ->
      erlang:error(error_type(M),[Ks,M]).
  
  -spec with(Ks, Map1) -> Map2 when
      Ks :: [K],
      Map1 :: map(),
  