anchor.diff:  %% Error
   
   format_error({missing_terminator, Close, Open, OpenLine}) ->
  -  io_lib:format("missing terminator: ~ts (for ~ts opening at line ~B)", [Close, Open, OpenLine]);
  +  io_lib:format("missing terminator: \"~ts\" (for \"~ts\" opening at line ~B)", [Close, Open, OpenLine]);
   format_error({invalid_n_base_char, Char, Base, Line}) ->
     io_lib:format("invalid char: ~tc for ~B-base number at line ~B", [Char, Base, Line]);
   format_error({invalid_eof, escape}) ->
  
positive.code:   {ok, lists:reverse(Tokens), build_meta(Line, Column)};
  
  %% terminator missing
  scan([], EndLine, Column,
       #kapok_scanner_scope{terminators=[{Open, {{OpenLine, _} ,_}}|_]},
       Tokens) ->
    Close = terminator(Open),
    {error, {{EndLine, Column}, ?MODULE, {missing_terminator, Close, Open, OpenLine}}, [],
     lists:reverse(Tokens)};
  
negative.code:          O == '#{', C == '}';
           O == '<<', C == '>>' ->
    Terminators;
  check_terminator({C, CMeta}, [{Open, OpenMeta}|_])
      when C == ')'; C == ']'; C == '}'; C == '>>' ->
    OpenLine = meta_line(OpenMeta),
    Close = terminator(Open),
    {error, {{meta_line(CMeta), meta_column(CMeta)}, ?MODULE,
             {missing_collection_terminator, atom_to_list(C), Open, OpenLine, Close}}};
  check_terminator({C, Meta}, [])
      when C == ')'; C == ']'; C == '}'; C == '>>' ->
    {error, {{meta_line(Meta), meta_column(Meta)}, ?MODULE, {unexpected_token, atom_to_list(C)}}};
  check_terminator(_, Terminators) ->
    Terminators.
  
  