anchor.diff:  t_collect_vars(?tuple_set(_) = TS, Acc) ->
     t_collect_vars_list(t_tuple_subtypes(TS), Acc);
   t_collect_vars(?map(_) = Map, Acc0) ->
  -erlang:display({?LINE,map,collect_vars,Map}),
     Acc = t_collect_vars_list(map_keys(Map), Acc0),
     t_collect_vars_list(map_values(Map), Acc);
   t_collect_vars(?opaque(Set), Acc) ->
  
positive.code: 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'
  
negative.code: 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) ->
    ?map([{t_subst_dict(K, Dict), t_subst_dict(V, Dict)} ||
           {K, V} <- Pairs]);
  t_subst_dict(?opaque(Es), Dict) ->
  