anchor.diff:  -export([pp/2]).
   
   %--- Types ---------------------------------------------------------------------
  +
   -type coding() :: bin | binary | dec | decimal | hex | hexadecimal
                     | nib | nibble.
   
  
positive.code: -spec pp(binary(), coding() | #{display := coding()}) -> 'ok'.
  pp(Bin, Display) when is_atom(Display) ->
      pp(Bin, #{display => Display});
  pp(<<B:8/bitstring, Rest/bitstring>>, Opts) ->
      print_byte(B, Opts),
      pp(Rest, Opts);
  pp(<<>>, _Opts) ->
      io:format("~n").
  
  %--- Internal ------------------------------------------------------------------
  print_byte(<<Byte>>, #{display := D}) when D == hex; D == hexadecimal ->
      io:format("~2.16.0B ", [Byte]);
  print_byte(<<Byte>>, #{display := D}) when D == bin; D == binary ->
      io:format("~8.2.0B ", [Byte]);
  print_byte(<<N1:4, N2:4>>, #{display := D}) when D == nib; D == nibble ->
      io:format("~4.2.0B ~4.2.0B  ", [N1, N2]);
  print_byte(<<Byte>>, #{display := D}) when D == dec; D == decimal->
      io:format("~3.10.0B ", [Byte]);
  print_byte(_Byte, Opts) ->
      case maps:find(display, Opts) of
          {ok, Value} -> error({invalid_option, display, Value});
          error       -> error({missing_option, display})
      end.
  
negative.code: %  ok
  % '''
  -spec pp(binary()) -> 'ok'.
  pp(Bin) -> pp(Bin, #{}).
  
  % @doc Print binary as numbers.
  %
  