Okay, that symmetry makes some sense.  At least R6RS and R7RS require that all Unicode characters be mapped to their Unicode codepoints.

You still need a term for integers that are mappable to characters, and "fixnum" still isn't it.  Unicode uses "code points" and "scalar values" (in slightly different contexts).

On Sat, Sep 21, 2019 at 3:57 AM Lassi Kortela <xxxxxx@lassi.io> wrote:
> I think that the domain of all *char* arguments should be all characters +
> all bytes (exact integers 0-255).  The domain of offsets would be all
> fixnums. That should do it.

I would extend that so the integer arguments must accept at least the
full range of character codes supported by the implementation.

So most Schemes, where all characters fit in a fixnum, can implement
this SRFI using fast fixnum math (fx+ and fx<? or the built-in operators
in C). If a Scheme is exotic enough that chars can be bignums, it has to
fall back to the generic bignum-capable procedures + and < which are
slower but still work. This seems the best compromise to me.