anchor.diff:  		    false -> T
   		  end
   	end,
  -      ReturnType = mk_fun_var(fun(Map) ->
  +      ReturnType = ?mk_fun_var(fun(Map) ->
   				  TmpArgTypes0 = lookup_type_list(Args, Map),
   				  TmpArgTypes = [UnopaqueFun(T) || T<- TmpArgTypes0],
   				  erl_bif_types:type(M, F, A, TmpArgTypes)
  
positive.code: 		 end,
  	       erl_bif_types:type(erlang, is_record, 3, TmpArgTypes2)
  	   end,
    DstV = mk_fun_var(DstFun, Args),
    mk_conj_constraint_list([mk_constraint(Dst, sub, DstV),
  			   mk_constraint(Arity, sub, t_integer()),
  			   mk_constraint(Tag, sub, t_atom()),
  
negative.code: -type dep()      :: integer().  %% type variable names used as constraint ids
  -type type_var() :: erl_types:erl_type(). %% actually: {'c','var',_,_}
  
  -record(fun_var, {'fun' :: fun((_) -> erl_types:erl_type()), deps :: [dep()],
  		  origin :: integer()}).
  
  -type constr_op()    :: 'eq' | 'sub'.
  -type fvar_or_type() :: #fun_var{} | erl_types:erl_type().
  