anchor.diff:                        true           -> State
                     end).
   
  --spec parse_raw(Input :: input(), State0 :: state(), Acc :: [row()]) ->
  -    {ok, RevRows :: [row()], State :: state()}.
  +-spec parse_raw(Input, State0, Acc) -> Result when
  +      Input :: input(),
  +      State0 :: state(),
  +      Acc :: rows(),
  +      Result :: {ok, RevRows, State},
  +      RevRows :: rows(),
  +      State :: state().
   parse_raw(eof, State, Acc) -> ecsv_nif:parse(eof, State, Acc);
   parse_raw(<<Bin:(?BLOCK_SIZE)/bytes, Rest/bytes>>, State, Acc) ->
       {ok, Acc2, S2} = ecsv_nif:parse(Bin, State, Acc),
  
positive.code: parse_raw(<<_/bytes>> = Bin, State, Acc) ->
      ecsv_nif:parse(Bin, State, Acc).
  
  -spec parser_init(Opts :: options()) -> state().
  parser_init(Opts) ->
      ecsv_nif:parser_init(Opts).
  
  -spec file_reader() -> reader_fun(file:io_device()).
  file_reader() ->
      fun(FS) ->
              case file:read(FS, ?BLOCK_SIZE) of
  
negative.code:             parse_stream_(RF, RS2, CF, CS2, S2)
      end.
  
  -spec acc(callback_message(), rows()) -> rows().
  acc({eof, X}, Acc) -> lists:reverse(X ++ Acc);
  acc({rows, X}, Acc) -> X ++ Acc.
  