anchor.diff:  %% pat_vars(Pattern) -> {[UsedVarName],[NewVarName]}.
   %%  Return variables in a pattern.  All variables are new variables
   %%  except those in the size field of binary segments.
  +%%  and map_pair keys
   
   pat_vars(#k_var{name=N}) -> {[],[N]};
   %%pat_vars(#k_char{}) -> {[],[]};
  
positive.code:     dict:find(map_key_clean(K),Used).
  
  %% Be explicit instead of using set_kanno(K,[])
  map_key_clean(#k_literal{val=V}) -> {k_literal,V};
  map_key_clean(#k_int{val=V})     -> {k_int,V};
  map_key_clean(#k_float{val=V})   -> {k_float,V};
  map_key_clean(#k_atom{val=V})    -> {k_atom,V};
  map_key_clean(#k_nil{})          -> k_nil.
  
  
  %% call_type(Module, Function, Arity) -> call | bif | apply | error.
  
negative.code:     pat_list_vars(Es);
  pat_vars(#k_map{es=Es}) ->
      pat_list_vars(Es);
  pat_vars(#k_map_pair{key=K,val=V}) ->
      {U1,New} = pat_vars(V),
      {[], U2} = pat_vars(K),
      {union(U1,U2),New}.
  
  pat_list_vars(Ps) ->
      foldl(fun (P, {Used0,New0}) ->
  