anchor.diff:  print1([Car|_]=List, D, I, L) ->
       %% Handle printable lists specially.
       case io_lib:printable_list(List) of
  -    true -> lfe_io:print1_string(List, $");    %"
  +    true -> lfe_io:print1_string(List, $");     %"
       false ->
  -        case print1_list_max(List, D-1, I+2, L) of
  -        {yes,Print} -> ["(",Print,")"];
  -        no ->
  -            %% Customise printing of lists.
  -            case indent_type(Car) of
  -            none ->                     %Normal lists.
  -                ["(",print1_list(List, D-1, I+1, L),")"];
  -            defun ->                    %Special case for defuns
  -                print1_defun(List, D, I, L);
  -            N when is_integer(N) ->     %Special N first elements
  -                print1_type(List, D, I, L, N)
  +        case print1_list_max(List, D-1, I+1, L-1) of
  +            {yes,Print} -> ["(",Print,")"];
  +            no ->
  +                %% Customise printing of lists.
  +                case indent_type(Car) of
  +                    none ->                     %Normal lists.
  +                        ["(",print1_list(List, D-1, I+1, L-1),")"];
  +                    defun ->                    %Special case for defuns
  +                        print1_defun(List, D, I, L);
  +                    N when is_integer(N) ->     %Special N first elements
  +                        print1_type(List, D, I, L, N)
  +                end
               end
  -        end
       end;
   print1([], _, _, _) -> "()";
   print1({}, _, _, _) -> "#()";
   print1(Tup, D, I, L) when is_tuple(Tup) ->
       Es = tuple_to_list(Tup),
  -    case print1_list_max(Es, D-1, I+3, L) of
  -    {yes,Print}  -> ["#(",Print,")"];
  -    no -> ["#(",print1_list(Es, D-1, I+2, L),")"]
  +    case print1_list_max(Es, D-1, I+2, L-1) of
  +        {yes,Print}  -> ["#(",Print,")"];
  +        no -> ["#(",print1_list(Es, D-1, I+2, L),")"]
       end;
   print1(Bit, _, _, _) when is_bitstring(Bit) ->
       ["#B(",lfe_io:print1_bits(Bit, 30),$)];     %First 30 bytes
  +print1(Map, D, I, L) when is_map(Map) ->
  +    print1_map(Map, D, I, L);
   print1(Other, _, _, _) ->
       lfe_io:print1(Other).                       %Use standard LFE for rest
   
  
positive.code:     NewI = I + length(Cs) + 2,
      {Spec,Rest} = split(N, Cdr),
      Tcs = [print1_list(Spec, D-1, NewI, L),
         print1_tail(Rest, D-2, I+2, L)],
      ["(" ++ Cs," ",Tcs,")"];
  print1_type(List, D, I, L, _) ->
      %% Too short to get worked up about or not enough depth.
  
negative.code: indent_type('bc') -> 1;                %Binary comprehensions
  indent_type('match-spec') -> 0;
  indent_type(_) -> none.
  
  %% print1_map(Map, Depth, Indentation, LineLength).
  %%  Print a map, one key value pair per line.
  
  print1_map(Map, D, I, L) ->
      [$#,$M,$(,print1_map_body(maps:to_list(Map), D, I+3, L-1),$)].
  
  print1_map_body([], _, _, _) -> [];
  print1_map_body([KV|KVs], D, I, L) ->
      [print1_map_assoc(KV, D, I, L)|print1_map_rest(KVs, D-1, I, L)].
  
  print1_map_rest([], _, _, _) -> [];
  print1_map_rest(_, 0, _, _) -> "...";
  print1_map_rest([KV|KVs], D, I, L) ->
      Massoc = print1_map_assoc(KV, D, I, L),
      [$\n,blanks(I, []),Massoc|print1_map_rest(KVs, D-1, I, L)].
  
  print1_map_assoc({K,V}, D, I, L) ->
      Kcs = print1(K, D-1, I, 99999),             %Print without line breaks
      Kl = flatlength(Kcs),
      Vcs = print1(V, D-1, I, 99999),             %Print without line breaks
      Vl = flatlength(Vcs),
      %% Test whether we can use the one line versiosn and how.
      if I + Kl + 1 + Vl =< L -> [Kcs,$\s,Vcs];
         (I + Kl =< L) and (I + Vl =< L) ->
              [Kcs,$\n,blanks(I, [])|Vcs];
         I + Kl =< L ->
              [Kcs,$\n,blanks(I, [])|print1(V, D-1, I, L)];
         I + Vl =< L ->
              [print1(K, D-1, I, L),$\n,blanks(I, [])|Vcs];
         true ->
              [print1(K, D-1, I, L),$\n,blanks(I, [])|print1(V, D-1, I, L)]
      end.
  