anchor.diff:      _ -> io_lib:format("Bad formed type ~w",[Type])
     end;
   t_form_to_string({type, _L, Name, List}) -> 
  -  io_lib:format("~w(~s)", [Name, sequence(t_form_to_string_list(List), ",")]).
  +  io_lib:format("~w(~s)",
  +		[Name, string:join(t_form_to_string_list(List), ",")]).
   
   t_form_to_string_list(List) ->
     t_form_to_string_list(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}) ->
    "<" ++ sequence(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_to_string(?product(List), RecDict) -> 
    "<" ++ comma_sequence(List, RecDict) ++ ">";
  t_to_string(?remote(Set), RecDict) ->
    string:join([case Args =:= [] of
  		 true  -> io_lib:format("~w:~w()", [Mod, Name]);
  		 false ->
  		   ArgString = comma_sequence(Args, RecDict),
  		   io_lib:format("~w:~w(~s)", [Mod, Name, ArgString])
  	       end
  	       || #remote{mod = Mod, name = Name, args = Args} <-
  		    set_to_list(Set)],
  	      " | ");
  t_to_string(?tuple(?any, ?any, ?any), _RecDict) -> "tuple()";
  t_to_string(?tuple(Elements, _Arity, ?any), RecDict) ->   
    "{" ++ comma_sequence(Elements, RecDict) ++ "}";
  