anchor.diff:  %% Configuration
   %% ===================================================================
   
  --define(JSON_TO_MAPS,true).
  -
  --define(TEST,true).
  -
  --define(NO_JSON_LIB,throw(no_DataObject_library_present)).
  +-define(DEFAULT_TYPE, json). % proplist | map | json
  +
  +-define(JSON_TO_MAPS,true). % parse raw binary json to maps
  +
  +-define(TEST,true). % testing, to be removed and managed by rebar
  +
  +-define(NO_JSON_LIB,throw(no_json_library_found)).
   
   -define(NOT_SUPPORTED,throw(not_yet_supported)).
   
   -ifdef(JSON_TO_MAPS).
   %%                  {Module, Decode, Encode}
   -define(JSON_LIBS, [{jsx, 
  -                     fun(__JS) -> maps:from_list(jsx:decode(__JS)) end,
  +                     fun(<<"{}">>) -> #{};
  +                        (__JS) -> maps:from_list(jsx:decode(__JS)) end,
                        fun(__JS) when is_list(__JS) -> jsx:encode(__JS);
                           (__JS) when is_map(__JS) -> jsx:encode(maps:to_list(__JS)) end},
                       {jiffy,
  -                     fun(__JS) -> jiffy:decode(__JS,[return_maps]) end,
  +                     fun(<<"{}">>) -> #{};
  +                        (__JS) -> jiffy:decode(__JS,[return_maps]) end,
                        fun(__JS) when is_list(__JS) -> jiffy:encode({__JS});
                           (__JS) when is_map(__JS) -> jiffy:encode(__JS) end}
                      ]).
   -else.
   %%                  {Module, Decode, Encode}
   -define(JSON_LIBS, [{jsx, 
  -                     fun(__JS) -> jsx:decode(__JS) end,
  +                     fun(<<"{}">>) -> [];
  +                        (__JS) -> jsx:decode(__JS) end,
                        fun(__JS) when is_list(__JS) -> jsx:encode(__JS);
                           (__JS) when is_map(__JS) -> jsx:encode(maps:to_list(__JS)) end},
                       {jiffy,
  -                     fun(__JS) -> {O} = jiffy:decode(__JS), O end,
  +                     fun(<<"{}">>) -> [];
  +                        (__JS) -> {O} = jiffy:decode(__JS), O end,
                        fun(__JS) when is_list(__JS) -> jiffy:encode({__JS});
                           (__JS) when is_map(__JS) -> jiffy:encode(__JS) end}
                      ]).
   -endif.
   
  +%% Technical macros
  +%% ===================================================================
   -define(TO_JSON,json_binary_encode).
   -define(FROM_JSON,json_binary_decode).
   -define(CL,clean_null_values).
  
positive.code:                     V1 =:= proplists:get_value(K1,DataObject2)
                      end,
      not lists:any(Is_Member,DataObject1);
  
  is_disjoint(DataObject1, DataObject2) when is_map(DataObject1), is_map(DataObject2) ->
      No_Common_Element = fun(_,_,false) -> false;
                          (K1,V1,true) -> {ok,V1} =/= maps:find(K1,DataObject2)
                     end,
      maps:fold(No_Common_Element,true,DataObject1);
  
  is_disjoint(DataObject1, DataObject2) ->
      is_disjoint(?FROM_JSON(DataObject1), ?FROM_JSON(DataObject2)).
  
  
negative.code: %% Type definitions
  %% ===================================================================
  -type data_object() :: list() | map() | binary().
  -type diff_object() :: list() | map() | binary().
  -type value() :: term().
  -type key() :: binary().
  
  