anchor.diff:  guard({op,1,Op,One})            -> {Op,guard(One)};           % binary op
   guard(Guard)                    -> arg(Guard).                % variable
   
  -arg({cons,_,_,_})   -> throw({badmatch,{syntax_error,no_lists_in_args}});
  +arg({cons,_,_,_})   -> exit({syntax_error,no_lists_in_args});
   arg({tuple,1,Args}) -> {tuple,[arg(A)||A<-Args]};
   arg({T,1,Var})      -> {T,Var}.
   
  
positive.code: 
  assert(Fun,Tag) ->
    try Fun()
    catch _:{badmatch,R} -> exit({Tag,{R,erlang:fun_info(Fun,name)}})
    end.
  
  
  
negative.code:         {ok,[{call,1,{remote,1,{atom,1,M},{atom,1,F}},Args}]} ->
            {M,F,[arg(A) || A<-Args]};
          {ok,[{remote,1,{atom,1,M},{atom,1,F}}]} ->
            {M,F,'_'};
          {ok,_} ->
            exit(this_is_too_confusing)
       end
    end.
  
  guards_fun(Str) -> 
  