anchor.diff:  
   -export([filter/2]).
   -export([date/1, iso8601/1]).
  --export([parse/1]).
  +-export([parse/1, merge_patch/2]).
   
   -record(pob, {op, path, value}).
   
  
positive.code: 	end,
  	lists:foldl(F, #pob{}, Operation).
  
  
  
negative.code: 	parse1(T, [{test, parse_path(Path), Value} | Acc]);
  parse1(_, _) ->
  	{error, invalid_format}.
  
  -spec merge_patch(Target, Patch) -> Result
  	when
  		Target :: {struct, list()},
  		Patch		:: {struct, list()} | {array, list()},
  		Result :: {struct, list()} | {array, list()}.
  %% @doc Psudo code implementation for RFC7386 Section 2
  merge_patch(Target, Patch) ->
  	case is_object(Patch) of
  		true ->
  			Target1 = case is_object(Target) of
  				true ->
  					Target;
  				false ->
  					{struct, []}
  			end,
  			do_merge(get_patch_keys(Patch), Patch, Target1);
  		false ->
  			Patch
  	end.
  
  %%----------------------------------------------------------------------
  %%  internal functions
  