anchor.diff:    end;
   t_form_to_string({user_type, _L, Name, List}) ->
     flat_format("~tw(~ts)",
  -              [Name, string:join(t_form_to_string_list(List), ",")]);
  +              [Name, flat_join(t_form_to_string_list(List), ",")]);
   t_form_to_string({type, L, Name, List}) ->
     %% Compatibility: modules compiled before Erlang/OTP 18.0.
     t_form_to_string({user_type, L, Name, List}).
  
positive.code:   "[" ++ t_form_to_string(Type) ++ ",...]";
  t_form_to_string({type, _L, nonempty_string, []}) -> "nonempty_string()";
  t_form_to_string({type, _L, product, Elements}) ->
    "<" ++ string:join(t_form_to_string_list(Elements), ",") ++ ">";
  t_form_to_string({type, _L, range, [From, To]} = Type) ->
    case {erl_eval:partial_eval(From), erl_eval:partial_eval(To)} of
      {{integer, _, FromVal}, {integer, _, ToVal}} ->
  
negative.code: t_form_to_string({type, _L, 'fun', [{type, _, any}, Range]}) ->
    "fun(...) -> " ++ t_form_to_string(Range);
  t_form_to_string({type, _L, 'fun', [{type, _, product, Domain}, Range]}) ->
    "fun((" ++ flat_join(t_form_to_string_list(Domain), ",") ++ ") -> "
      ++ t_form_to_string(Range) ++ ")";
  t_form_to_string({type, _L, iodata, []}) -> "iodata()";
  t_form_to_string({type, _L, iolist, []}) -> "iolist()";
  