anchor.diff:  
   -spec init('erlang.io.IReader':type()) -> no_return().
   init(Reader) ->
  -  State = #{ reader        => Reader
  -           , buffer        => <<>>
  -           , at_line_start => true
  +  State = #{ reader             => Reader
  +           , buffer             => <<>>
  +           , at_line_start      => true
  +           , at_line_start_prev => true
              },
     ?MODULE:loop(State).
   
  
positive.code:   X.
  
  -spec update_at_line_start(binary(), state()) -> state().
  update_at_line_start(Result, State) ->
    State#{at_line_start := 'clojerl.String':ends_with(Result, <<"\n">>)}.
  
  -spec get_chars(integer(), state()) -> {binary() | eof, state()}.
  get_chars(N, #{reader := Reader, buffer := <<>>} = State) ->
  
negative.code:   {more, {cont, Length - 1, State#{buffer := RestStr}}}.
  
  -spec unread_buffer(state(), binary()) -> {ok | {error, term()}, state()}.
  unread_buffer(State0 = #{buffer := Buffer, at_line_start_prev := Prev}, Str) ->
    try
      State1 = State0#{ buffer        := <<Str/binary, Buffer/binary>>
                      , at_line_start := Prev
                      },
      {ok, State1}
    catch
      _:Reason ->
        {{error, Reason}, State0}
    end.
  