anchor.diff:         {{a,b,2},[{['$1','$1'],[],[]}],[local]}}
        ,{"a:b(X,y)",
          {{a,b,2},[{['$1',y],[],[]}],[local]}}
  -     ,{" a:foo()when a==b",
  +     ,{"a:foo()when a==b",
          {{a,foo,0},[{[],[{'==',a,b}],[]}],[local]}}
  +     ,{"a:foo when a==b",
  +       {{a,foo,'_'},[{'_',[{'==',a,b}],[]}],[local]}}
        ,{"a:b(X,1)",
          {{a,b,2},[{['$1',1],[],[]}],[local]}}
        ,{"a:b(X,\"foo\")",
  
positive.code:        {{x,y,2},[{[{'$1',{'$2','$1'}},'$1'],[],[]}],[local]}}
       ,{"x:y(A,[A,{B,[B,A]},A],B)",
         {{x,y,3},[{['$1',['$1',{'$2',['$2','$1']},'$1'],'$2'],[],[]}],[local]}}
       ,{" a:foo when a==b",
         guards_without_args}
       ,{"a:b(X,y)when is_atom(Y)",
         unbound_variable}
       ,{"x:c([string])",
  
negative.code: ca_fun({var,'_'},{Vars,O}) ->
    {Vars,O++['_']};
  ca_fun({var,Var},{Vars,O}) ->
    V = 
      case proplists:get_value(Var,Vars) of
        undefined -> list_to_atom("\$"++integer_to_list(length(Vars)+1));
        X -> X
      end,
    {[{Var,V}|Vars],O++[V]};
  ca_fun({Type,Val},{Vars,O}) ->
    assert_type(Type,Val),
  