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: 			      S#c_literal{val=T}), Cons);
  pat_alias(#c_cons{anno=Anno,hd=H1,tl=T1}, #c_cons{hd=H2,tl=T2}) ->
      ann_c_cons(Anno, pat_alias(H1, H2), pat_alias(T1, T2));
  
  %% alias tuples
  pat_alias(#c_tuple{anno=Anno,es=Es1}, #c_literal{val=T}) when is_tuple(T) ->
      Es2 = [#c_literal{val=E} || E <- tuple_to_list(T)],
      ann_c_tuple(Anno, pat_alias_list(Es1, Es2));
  