anchor.diff:  default_block_size() ->
       ?BLOCK_SIZE.
   
  +-spec(parse(Bin :: binary()) -> [row()]).
   parse(Bin) ->
       {ok, Acc, S} = parse_raw(Bin, default_state(), []),
       {ok, Ls, _} = parse_raw(eof, S, Acc),
       lists:reverse(Ls).
   
  +-spec(parse(Bin :: binary(), State :: state()) -> {ok, [row()], State2 :: state()}).
   parse(Bin, State) ->
       parse_raw(Bin, State, []).
   
  +-spec(parse_stream(RF :: reader_fun(RST), RS0 :: RST, CF :: callback_fun(CST), CS0 :: CST) -> {RS :: RST, CS :: CST, State :: state()}).
   parse_stream(ReaderFun, ReaderState, CallbackFun, CallbackState) ->
       parse_stream(ReaderFun, ReaderState, CallbackFun, CallbackState,
                    default_state()).
   
  +
  +-spec(parse_stream(RF :: reader_fun(RST), RS0 :: RST, CF :: callback_fun(CST), CS0 :: CST, State0 :: state()) -> {RS :: RST, CS :: CST, State :: state()}).
   parse_stream(ReaderFun, ReaderState, CallbackFun, CallbackState, State) ->
       parse_stream_(ReaderFun, ReaderState, CallbackFun, CallbackState,
                    State).
   
  +-spec(parser_init(Delim :: char(), Quote :: char()) -> state()).
   parser_init(Delim, Quote) ->
       erlang:nif_error(not_loaded, [Delim, Quote]).
   
  +-spec(file_reader() -> reader_fun(reader_state())).
   file_reader() ->
       fun(FS) ->
               case file:read(FS, ?BLOCK_SIZE) of
  
positive.code: 
  -on_load(init/0).
  
  %%====================================================================
  %% API functions
  %%====================================================================
  
negative.code:             end
      end.
  
  -spec(block_chopper(BlockSize :: pos_integer()) -> reader_fun(reader_state())).
  block_chopper(BlockSize) ->
      fun(<<>>) ->
              {eof, <<>>};
         (<<Bin:BlockSize/bytes, Rest/bytes>>) ->
              {Bin, Rest};
         (Bin) ->
              {Bin, <<>>}
  