anchor.diff:  
   flat_format(F, S) ->
     lists:flatten(io_lib:format(F, S)).
  +
  +flat_join(List, Sep) ->
  +  lists:flatten(lists:join(Sep, List)).
   
   %%=============================================================================
   %% 
  
positive.code: 		  end end,
    StrMand = [{Tos(K),Tos(V)}||{K,?mand,V}<-Pairs],
    StrOpt  = [{Tos(K),Tos(V)}||{K,?opt,V}<-Pairs],
    "#{" ++ string:join([K ++ ":=" ++ V||{K,V}<-StrMand]
  		      ++ [K ++ "=>" ++ V||{K,V}<-StrOpt]
  		      ++ ExtraEl, ", ") ++ "}";
  t_to_string(?tuple(?any, ?any, ?any), _RecDict) -> "tuple()";
  t_to_string(?tuple(Elements, _Arity, ?any), RecDict) ->   
    "{" ++ comma_sequence(Elements, RecDict) ++ "}";
  
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()";
  