anchor.diff:      erlang:raise(error, {undef_record,Name}, stacktrace());
   expr({record,_,_,Name,_}, _Bs, _Lf, _Ef, _RBs) ->
       erlang:raise(error, {undef_record,Name}, stacktrace());
  +
  +%% map
  +expr({map_field,_,EK, EV}, Bs0, Lf, Ef, RBs) ->
  +    {value,K,Bs1} = expr(EK, Bs0, Lf, Ef, none),
  +    {value,V,Bs2} = expr(EV, Bs0, Lf, Ef, none),
  +    ret_expr({K,V}, merge_bindings(Bs1,Bs2), RBs);
  +expr({map,_, Binding,Es}, Bs0, Lf, Ef, RBs) ->
  +    {value, Map0, Bs1} = expr(Binding, Bs0, Lf, Ef, RBs),
  +    {Vs,Bs} = expr_list(Es, Bs1, Lf, Ef),
  +    ret_expr(lists:foldl(fun({K,V}, Mi) -> map:put(K,V,Mi) end, Map0, Vs), Bs, RBs);
  +expr({map,_,Es}, Bs0, Lf, Ef, RBs) ->
  +    {Vs,Bs} = expr_list(Es, Bs0, Lf, Ef),
  +    ret_expr(lists:foldl(fun({K,V}, Mi) -> map:put(K,V,Mi) end, map:new(), Vs), Bs, RBs);
  +
  +
   expr({block,_,Es}, Bs, Lf, Ef, RBs) ->
       exprs(Es, Bs, Lf, Ef, RBs);
   expr({'if',_,Cs}, Bs, Lf, Ef, RBs) ->
  
positive.code: match_tuple([], _, _, Bs, _BBs) ->
      {match,Bs}.
  
  %% match_list(PatternList, TermList, Bindings) ->
  %%	{match,NewBindings} | nomatch
  %%  Try to match a list of patterns against a list of terms with the
  
negative.code: type_test(function) -> is_function;
  type_test(binary) -> is_binary;
  type_test(record) -> is_record;
  type_test(map) -> is_map;
  type_test(Test) -> Test.
  
  
  