anchor.diff:  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
   %%
  
positive.code: t_unopaque(?opaque(_) = T, Opaques) ->
    case Opaques =:= 'universe' orelse is_opaque_type(T, Opaques) of
      true -> t_unopaque(t_opaque_structure(T), Opaques);
      false -> T  % XXX: needs revision for parametric opaque data types
    end;
  t_unopaque(?list(ElemT, Termination, Sz), Opaques) ->
    ?list(t_unopaque(ElemT, Opaques), t_unopaque(Termination, Opaques), Sz);
  
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)]);
  