anchor.diff:  t_contains_opaque(?int_set(_Set), _Opaques) -> false;
   t_contains_opaque(?list(Type, Tail, _), Opaques) ->
     t_contains_opaque(Type, Opaques) orelse t_contains_opaque(Tail, Opaques);
  -t_contains_opaque(?map(Pairs), Opaques) ->
  -  list_contains_opaque([V||{_,V}<-Pairs], Opaques) orelse
  -  list_contains_opaque([K||{K,_}<-Pairs], Opaques);
  +t_contains_opaque(?map(_) = Map, Opaques) ->
  +erlang:display({?LINE,map,contains,Map}),
  +  list_contains_opaque(map_values(Map), Opaques) orelse
  +  list_contains_opaque(map_keys(Map), Opaques);
   t_contains_opaque(?matchstate(_P, _Slots), _Opaques) -> false;
   t_contains_opaque(?nil, _Opaques) -> false;
   t_contains_opaque(?number(_Set, _Tag), _Opaques) -> false;
  
positive.code:   t_tuple([t_subst_aux(E, VarMap) || E <- Elements]);
  t_subst_aux(?tuple_set(_) = TS, VarMap) ->
    t_sup([t_subst_aux(T, VarMap) || T <- t_tuple_subtypes(TS)]);
  t_subst_aux(?opaque(Es), VarMap) ->
     List = [Opaque#opaque{args = [t_subst_aux(Arg, VarMap) || Arg <- Args],
                           struct = t_subst_aux(S, VarMap)} ||
  
negative.code:   t_has_var_list(Elements);
  t_has_var(?tuple_set(_) = T) ->
    t_has_var_list(t_tuple_subtypes(T));
  t_has_var(?map(_)= Map) ->
  erlang:display({?LINE,map,has_var,Map}),
    t_has_var_list(map_keys(Map)) orelse t_has_var_list(map_values(Map));
  t_has_var(?opaque(Set)) ->
    %% Assume variables in 'args' are also present i 'struct'
    t_has_var_list([O#opaque.struct || O <- set_to_list(Set)]);
  