anchor.diff:    ?union([t_subst_aux(E, VarMap) || E <- List]);
   t_subst_aux(T, _VarMap) ->
     T.
  -	      
  --spec subst_all_remote(erl_type(), erl_type()) -> erl_type().
  -
  -subst_all_remote(Type0, Substitute) ->
  -  Map =
  -    fun(Type) ->
  -        case t_is_remote(Type) of
  -          true -> Substitute;
  -          false -> Type
  -        end
  -    end,
  -  t_map(Map, Type0).
   
   %%-----------------------------------------------------------------------------
   %% Unification
  
positive.code: -spec subtract_union([erl_type(),...], [erl_type(),...]) -> erl_type().
  
  subtract_union(U1, U2) ->
    [A1,B1,F1,I1,L1,N1,T1,M1,O1,R1,Map1] = U1,
    [A2,B2,F2,I2,L2,N2,T2,M2,O2,R2,Map2] = U2,
    List1 = [A1,B1,F1,I1,L1,N1,T1,M1,?none,R1,Map1],
    List2 = [A2,B2,F2,I2,L2,N2,T2,M2,?none,R2,Map2],
    Sub1 = subtract_union(List1, List2, 0, []),
    O = if O1 =:= ?none -> O1;
           true -> t_subtract(O1, ?union(U2))
  
negative.code:     false -> Pred(Type)
    end;
  do_opaque(?union(List) = Type, Opaques, Pred) ->
    [A,B,F,I,L,N,T,M,O,Map] = List,
    if O =:= ?none -> Pred(Type);
      true ->
        case Opaques =:= 'universe' orelse is_opaque_type(O, Opaques) of
          true ->
            S = t_opaque_structure(O),
            do_opaque(t_sup([A,B,F,I,L,N,T,M,S,Map]), Opaques, Pred);
          false -> Pred(Type)
        end
    end;
  