anchor.diff:  
   pat_alias(#c_var{name=V1}, P2) -> #c_alias{var=#c_var{name=V1},pat=P2};
   pat_alias(P1, #c_var{name=V2}) -> #c_alias{var=#c_var{name=V2},pat=P1};
  +
  +%% alias cons
   pat_alias(#c_cons{}=Cons, #c_literal{anno=A,val=[H|T]}=S) ->
       pat_alias(Cons, ann_c_cons_skel(A, #c_literal{anno=A,val=H},
   				    S#c_literal{val=T}));
  
positive.code:     %% no need to hold any used/new annotations in a pattern.
      {#c_binary{anno=lineno_anno(L, St),segments=pat_bin(Ps, St)},[],St};
  pattern({match,_,P1,P2}, St) ->
      {Cp1,[],St1} = pattern(P1, St),
      {Cp2,[],St2} = pattern(P2, St1),
      {pat_alias(Cp1,Cp2),[],St2}.
  
  %% pattern_map_pairs([MapFieldExact],State) -> [#c_map_pairs{}]
  pattern_map_pairs(Ps, St) ->
  
negative.code: 		{CMapPair,EpsP,Sti1} = pattern_map_pair(P,Sti0),
  		{CMapPair, {EpsM++EpsP,Sti1}}
  	end, {[],St}, Ps),
      {pat_alias_map_pairs(CMapPairs,[]),Eps,St1}.
  
  %% remove cluddering annotations
  pattern_map_clean_key(#c_literal{val=V}) -> {literal,V};
  pattern_map_clean_key(#c_var{name=V}) -> {var,V}.
  
  pat_alias_map_pairs(Ps1,Ps2) ->
      Ps = Ps1 ++ Ps2,
      F = fun(#c_map_pair{key=Ck,val=Cv},Dbi) ->
  		K = pattern_map_clean_key(Ck),
  