anchor.diff:          raw/0,
           create/2,
           set/2,
  +        set_default/2,
           get/1,
           get/2,
           exists/1,
  
positive.code:         walk/1,
          set_app_env/0,
          set_app_env/1,
          set_app_env/2
      ]).
  
  
  
negative.code: 
  set_app_env()    -> set_app_env(application:get_application()).
  set_app_env(App) -> set_app_env(App, []).
  set_app_env(App, RemoveKeyPrefix) -> set_app_env(App, RemoveKeyPrefix, undefined).
  set_app_env(App, RemoveKeyPrefix, Filter) when [] == RemoveKeyPrefix
                                               ; is_list(RemoveKeyPrefix)
                                               , is_atom(hd(RemoveKeyPrefix)) ->
      Fun = fun(node,     _Indent,_RevPath) -> ok;
               ({value,V},_Indent, RevPath) ->
                Path = remove_key_prefix(lists:reverse(RevPath), RemoveKeyPrefix),
                case Filter==undefined orelse Filter(RevPath) of
                    true ->
                        application:set_env(
                            App,
                            list_to_atom(string:join([atom_to_list(I) || I <- Path], ".")),
                            V);
                    false ->
                        ok
                end
            end,
      walk(Fun).
  
  