anchor.diff:  infer_types(_, #vst{}) ->
       fun(_, S) -> S end.
   
  -infer_types_1(#value{op={bif,'=:='},args=[Arity,{integer,_}=Val]}) ->
  +infer_types_1(#value{op={bif,'=:='},args=[LHS,RHS]}) ->
       fun({atom,true}, S) ->
  -            Infer = infer_types(Arity, S),
  -            Infer(Val, S);
  +            Infer = infer_types(RHS, S),
  +            Infer(LHS, S);
          (_, S) -> S
  +    end;
  +infer_types_1(#value{op={bif,element},args=[{integer,Index}=Key,Tuple]}) ->
  +    fun(Val, S) ->
  +            Type = get_term_type(Val, S),
  +            update_type(fun meet/2,{tuple,[Index],#{ Key => Type }}, Tuple, S)
       end;
   infer_types_1(#value{op={bif,is_atom},args=[Src]}) ->
       infer_type_test_bif({atom,[]}, Src);
  
positive.code:     ElementType = get_element_type(PosType, Tuple, Vst0),
      InferredType = {tuple,[get_tuple_size(PosType)],#{}},
      Vst1 = branch_state(Fail, Vst0),
      Vst = update_type(fun meet/2, InferredType, Tuple, Vst1),
      extract_term(ElementType, {bif,element}, [Tuple], Dst, Vst);
  valfun_4({bif,raise,{f,0},Src,_Dst}, Vst) ->
      validate_src(Src, Vst),
      kill_state(Vst);
  
negative.code: svb_1([Val,{f,L}|T], Src, Vst0) ->
      Vst = complex_test(L,
                         fun(BranchVst) ->
                                 update_eq_types(Src, Val, BranchVst)
                         end,
                         fun(FailVst) ->
                                 update_ne_types(Src, Val, FailVst)
                         end, Vst0),
      svb_1(T, Src, Vst);
  svb_1([], _, Vst) ->
  