anchor.diff:  % The call fails with a `{badmap,Map}' exception if `Map' is not a map, or with
   % a `{badpath,Path}' exception if `Path' is not a path.
   -spec deep_remove(path(), map()) -> map().
  -deep_remove([], Map) when is_map(Map) ->
  -    Map;
  -deep_remove(Path, Map) when is_list(Path), is_map(Map) ->
  -    remove(Map, Path);
  -deep_remove(Path, Map) when is_map(Map) ->
  -    error({badpath, Path});
  -deep_remove(Path, Map) when is_list(Path) ->
  -    error({badmap, Map}).
  +deep_remove(Path, Map) ->
  +    check(Path, Map),
  +    remove(Map, Path).
   
   % @doc Merges a list of maps recursively into a single map. If a path exist in
   % several maps, the value in the first nested map is superseded by the value in
  
positive.code:             (P, _Rest, error) ->
                  error({badkey, P})
          end
      );
  deep_update(Path, _Value, Map1) when is_map(Map1) ->
      error({badpath, Path});
  deep_update(Path, _Value, Map1) when is_list(Path) ->
      error({badmap, Map1}).
  
  % @doc Removes the last existing key of `Path', and its associated value from
  % `Map1' and returns a new map `Map2' without that key. Any deeper non-existing
  
negative.code: % a `{badpath,Path}' exception if `Path' is not a path. `{badvalue,P}' is raised
  % if a term that is not a map exists as a intermediate key at the path `P'.
  -spec deep_put(path(), term(), map()) -> map().
  deep_put(Path, Value, Map1)  ->
      check(Path, Map1),
      update(Map1, Path,
          fun() -> Value end,
          fun
  