anchor.diff:  	end,
       G(G, F, Ref, Dict).
   
  +%%% @doc
  +%%% Replaces the elements in the dictionary Dict inside the template Template.
  +%%% @param Ref the reference used to create the tags in the template, it is used
  +%%% to reliably tell apart items that are template tags from those that are not,
  +%%% which allows the use of several kinds of templates in the same structure.
  +%%% @param Dict dictionary that stores the substitutions to make in the template.
  +%%% On each entry of the dictionary, the key represents the name of a tag, and
  +%%% the value represents the term that must be swapped with the tag. The dict
  +%%% is of the same kind that the one generated by the function extract_vars.
  +%%% All the names of the tags inside the template must have their entry on
  +%%% the dictionary or otherwise the function will throw the exception
  +%%% <code>unbound_variable</code>.
  +%%% @param Template the template that must be used. Templates that are used
  +%%% with replace_vars/3 function cannot have tags of the kind tobj.
  +%%% @return the element generated from the template
  +%%% @throws {unbound_variable, term()}
  +%%% @see extract_vars/4
  +-spec replace_vars(Ref :: reference(), Dict :: dict(), Template :: any()) -> any().
   replace_vars(Ref, Dict, Element) ->
       F = replace_mapper(Ref, Dict),
       F(Element).
  
positive.code: 
  %% Tagging funcs
  
  tsatom_val(Ref, Value) ->
      tobj(Ref,
  	[{{erl_syntax, type}, atom},
           {{erl_syntax, atom_value}, Value}]).
  
  tsint_val(Ref, Value) ->
      tobj(Ref,
  	 [{{erl_syntax, type}, integer},
  	  {{erl_syntax, integer_value}, Value}]).
  
  tsvar_id(Ref, Id) ->
      tobj(Ref,
  	 [{{erl_syntax, type}, variable},
  	  {identity, Id}]).
  
  tsvar_name(Ref, Name) ->
      tobj(Ref,
  	 [{{erl_syntax, type}, variable},
            {{erl_syntax, variable_name}, Name}]).
  
  
  tsvar_name_and_id(Ref, Name, Value) ->
      tobj(Ref,
  	 [{{erl_syntax, type}, variable},
            {{erl_syntax, variable_name}, Name},
  	  {identity, Value}]).
  
  tsoneellist_elid(Ref, Value) ->
      tobj(Ref,
  	 [{{erl_syntax, list_length}, 1},
  
negative.code: 
  %% Tag extraction
  
  %%% @doc
  %%% Matches an Erlang structure (Target) with a template and
  %%% stores in a dictionary the subterms that match with the
  %%% tags in the template. If several tags have the same
  %%% name, it ensures that all of them have the same Erlang
  %%% structure associated.
  %%% @param Ref the reference used to create the tags in the template, it is used
  %%% to reliably tell apart items that are template tags from those that are not,
  %%% which allows the use of several kinds of templates in the same structure.
  %%% @param Template the template that must be used.
  %%% @param Target the Erlang structure to match to the template.
  %%% @param Dict the dictionary that will save the information extracted. It
  %%% may be empty and it may be the one returned by another call to this function,
  %%% this way it acts as an accumulator.
  %%% @return a tuple with the atom <code>match</code> and the resulting
  %%% dictionary if the template matches the target, or else the atom
  %%% <code>no_match</code> and a term explaining the reason why it
  %%% did not match. If the template produces an exception while matching
  %%% this is also considered a <code>no_match</code>.
  %%% @see replace_vars/3
  -spec extract_vars(reference(), Template :: any(), Target :: any(), Dict :: dict()) ->
  			  {'match', dict()} | {'no_match', Err :: any()}.
  extract_vars(Ref, Template, Target, Dict) ->
      try extract_vars({Template, Target}, {Ref, Dict}) of
  	{_, Result} -> {match, Result}
      catch
  	exit:{no_match, Err} -> {no_match, Err}
      end.
  extract_vars({#tcontainer{ref = Ref, content = Content},
  	      Sth}, {Ref, Result}) ->
      case Content of
  