anchor.diff:      end,
     Char =
       case Token of
  -      <<>> -> clj_utils:throw(<<"EOF">>, location(State));
         Ch when size(Ch) == 1 -> Ch;
         <<"newline">> -> $\n;
         <<"space">> -> $ ;
  
positive.code: -spec read_fold(read_fold_fun(), binary(), opts(), clj_env:env()) ->
    clj_env:env().
  read_fold(Fun, Src, Opts, Env) ->
    State = new_state(Src, Env, Opts, false),
    read_fold_loop(Fun, State).
  
  -spec read_fold_loop(read_fold_fun(), state()) -> clj_env:env().
  read_fold_loop(Fun, State) ->
    case dispatch(State) of
      %% Only finish when there is no more source to consume
      #{src := <<>>, forms := [], env := Env} ->
        Env;
  
negative.code: ensure_read(#{forms := [Form]}) ->
    Form;
  ensure_read(State) ->
    ensure_read(read_one(State, true)).
  
  %% @private
  -spec do_read_all(state()) -> state().
  do_read_all(#{src := <<>>} = State) ->
    State;
  do_read_all(State) ->
    do_read_all(read_one(State, false)).
  
  -spec read_one(state()) -> state().
  read_one(State) ->
  