anchor.diff:  t_form_to_string({paren_type, _L, [Type]}) ->
     io_lib:format("(~s)", [t_form_to_string(Type)]);
   t_form_to_string({remote_type, _L, [{atom, _, Mod}, {atom, _, Name}, Args]}) ->
  -  ArgString = "(" ++ sequence(t_form_to_string_list(Args), ",") ++ ")",
  +  ArgString = "(" ++ string:join(t_form_to_string_list(Args), ",") ++ ")",
     io_lib:format("~w:~w", [Mod, Name]) ++ ArgString;
   t_form_to_string({type, _L, arity, []}) -> "arity()";
   t_form_to_string({type, _L, 'fun', []}) -> "fun()";
   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((" ++ sequence(t_form_to_string_list(Domain), ",") ++ ") -> " 
  +  "fun((" ++ string: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()";
  
positive.code: 	    true -> "_";
  	    false -> t_to_string(T, RecDict)
  	  end || T <- Types],
    sequence(List, ",").
  
  union_sequence(Types, RecDict) ->
    List = [t_to_string(T, RecDict) || T <- Types], 
    sequence(List, " | ").
  
  sequence(List, Delimiter) ->
    sequence(List, [], Delimiter).
  
  sequence([], [], _Delimiter) ->
    [];
  sequence([T], Acc, _Delimiter) ->
    lists:flatten(lists:reverse([T|Acc]));
  sequence([T|Ts], Acc, Delimiter) ->
    sequence(Ts, [T ++ Delimiter|Acc], Delimiter).
  
  %%=============================================================================
  %% 
  
negative.code: 
  record_to_string(Tag, [_|Fields], FieldNames, RecDict) ->
    FieldStrings = record_fields_to_string(Fields, FieldNames, RecDict, []),
    "#" ++ atom_to_list(Tag) ++ "{" ++ string:join(FieldStrings, ",") ++ "}".
  
  record_fields_to_string([F|Fs], [{FName, _DefType}|FDefs], RecDict, Acc) ->
    NewAcc =
  