Re: EOF handling, and reading zero/one/many values Lassi Kortela 21 Jan 2020 22:33 UTC

>>> I propose that if json-reader gets an eof-object before reading
>>> any part of a JSON value, that it return the eof-object.
>>
>> What is the rationale?
>
> To allow you to create a loop that reads multiple JSON representations
> from an input stream and has a clear way to terminate the loop rather
> than having to catch an exception.

Agreed. These cases would be useful to support with standard procedures:

1. Read at most one JSON value from port.
    - Return eof-object if there are no values.

2. Read exactly one JSON value from port.
    - Error if there are no values.
    - Error if there is more than one value.

The natural implementation of 2 is a simple wrapper around 1, so it's
nice to expose 1 to users of the library as well.

This may be too fancy:

3. Read all JSON values from port and return them as a list.
    - Return empty list if there are no values.

The natural name for procedure 2 is `json-read`, which is in the current
draft (though the draft doesn't say what the procedure does if it
encounters end-of-file or more than one value).

One natural name for procedure 1 is `json-read?` with a question mark,
by analogy to the question mark in regexps. Scheme uses ? for
predicates, so it can be a bit misleading. Another possible name:
`json-read-maybe`.

Or procedure 1 could be called `json-read` (after all, Scheme `read`
returns eof-object if it doesn't find any more data). And procedure 2
could then be called `json-read-one` or `json-read-1` or something.