anchor.diff:                  [],
                   DataObject);
   filter(Fun,DataObject) when is_map(DataObject) ->
  -    map:fold(fun(K,V,In) ->
  +    maps:fold(fun(K,V,In) ->
                       case Fun(K,V) of
                           true -> maps:put(K,V,In);
                           false -> In
  
positive.code:      {"map",?_assert(is_binary(to_binary(?TEST_MAP)))},
       {"json",?_assert(is_binary(to_binary(?TEST_JSON)))}].
  
  filter_test_() -> [].
  
  include_test_() -> [].
  
  exclude_test_() -> [].
  
  
negative.code:     is_disjoint(?FROM_JSON(DataObject1), ?FROM_JSON(DataObject2)).
  -endif.
  
  -ifdef(TEMP_ALLOW_MATCH).
  %% @doc Returns true if a data object matches a match object.
  %% A match object is a key value pair, in the same format as the
  %% data object, who can have wildcards in the value fields in order
  %% to match values. Fields not present in match object are ignored.
  -spec match(match_object(), data_object()) -> boolean().
  match(MatchObject,DataObject) when is_list(DataObject) ->
      DataObjectProj = include(keys(MatchObject),DataObject),
      lists:all(fun({K,MatchV}) ->
                  binary_match(proplists:get_value(K,DataObjectProj),MatchV)
                  end,
                MatchObject).
  %TODO: Implement for maps and binary json, and test it
  -endif.
  
  
  %% ===================================================================
  %% Internal functions
  