anchor.diff:      if P == Val -> {yes,Pbs};
          true -> no
       end;
  -match([cons,H,T], [V|Vs], Pbs0, Env) ->        %Explicit cons constructor
  +match(['=',P1,P2], Val, Pbs0, Env) ->           %Aliases
  +    case match(P1, Val, Pbs0, Env) of
  +        {yes,Pbs1} -> match(P2, Val, Pbs1, Env);
  +        no -> no
  +    end;
  +match([cons,H,T], [V|Vs], Pbs0, Env) ->         %Explicit cons constructor
       case match(H, V, Pbs0, Env) of
           {yes,Pbs1} -> match(T, Vs, Pbs1, Env);
           no -> no
       end;
  -match([list|Ps], Val, Pbs, Env) ->        %Explicit list constructor
  +match([list|Ps], Val, Pbs, Env) ->              %Explicit list constructor
       match_list(Ps, Val, Pbs, Env);
   match([tuple|Ps], Val, Pbs, Env) ->
       %% io:fwrite("~p ~p\n", [Ps,Val]),
  
positive.code:         {yes,Pbs1} -> match(Ps, Vs, Pbs1, Env);
          no -> no
      end;
  %% match([_|_], _, _, _) ->            %No constructor
  %%     erlang:error(illegal_pattern);
  match(['=',P1,P2], Val, Pbs0, Env) ->        %Aliases
      case match(P1, Val, Pbs0, Env) of
          {yes,Pbs1} -> match(P2, Val, Pbs1, Env);
          no -> no
      end;
  match([], [], Pbs, _) -> {yes,Pbs};
  match(Symb, Val, Pbs, Env) when is_atom(Symb) ->
      match_symb(Symb, Val, Pbs, Env);
  
negative.code:     Eval = fun(S) -> eval_gexpr(S, Env) end,
      eval_bitsegs(Vsps, Eval).
  
  %% gmap_pairs(Args, Env) -> [{K,V}].
  
  gmap_pairs([K,V|As], Env) ->
      Key = map_key(K),                           %Evaluate the key
      [{Key,eval_gexpr(V, Env)}|gmap_pairs(As, Env)];
  gmap_pairs([], _) -> [];
  gmap_pairs(_, _) -> erlang:error(badarg).
  
  %% eval_gif(IfBody, Env) -> Val.
  
  eval_gif([Test,True], Env) ->
  