anchor.diff:    t_tuple([t_subst_dict(E, Dict) || E <- Elements]);
   t_subst_dict(?tuple_set(_) = TS, Dict) ->
     t_sup([t_subst_dict(T, Dict) || T <- t_tuple_subtypes(TS)]);
  +t_subst_dict(?map(Pairs), Dict) ->
  +erlang:display({?LINE,map,subst_dict,Pairs}),
  +  ?map([{t_subst_dict(K, Dict), t_subst_dict(V, Dict)} ||
  +         {K, V} <- Pairs]);
   t_subst_dict(?opaque(Es), Dict) ->
     List = [Opaque#opaque{args = [t_subst_dict(Arg, Dict) || Arg <- Args],
                           struct = t_subst_dict(S, Dict)} ||
  
positive.code:   t_has_var_list(Elements);
  t_has_var(?tuple_set(_) = T) ->
    t_has_var_list(t_tuple_subtypes(T));
  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)]);
  
negative.code: is_same_type_name2(gb_trees, tree, [_, _], gb_trees, gb_tree, []) -> true;
  is_same_type_name2(_, _, _, _, _, _) -> false.
  
  map_keys(?map(Pairs)) ->
    [K || {K, _} <- Pairs].
  
  map_values(?map(Pairs)) ->
    [V || {_, V} <- Pairs].
  
  %% -----------------------------------
  %% Set
  %%
  