anchor.diff:    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)]);
  
positive.code:   UL = t_unopaque(L, Opaques),
    UT = t_unopaque(T, Opaques),
    UF = t_unopaque(F, Opaques),
    {OF,UO} = case t_unopaque(O, Opaques) of
                ?opaque(_) = O1 -> {O1, []};
                Type -> {?none, [Type]}
              end,
    t_sup([?union([A,B,UF,I,UL,N,UT,M,OF,R,Map])|UO]);
  t_unopaque(T, _) ->
    T.
  
  
negative.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
    end;
  t_unopaque(?list(ElemT, Termination, Sz), Opaques) ->
    ?list(t_unopaque(ElemT, Opaques), t_unopaque(Termination, Opaques), Sz);
  