Am Sa., 27. Feb. 2021 um 07:42 Uhr schrieb Shiro Kawai <xxxxxx@gmail.com>:
In the entry flexvector? it says 'disjoint' type predicate.  How much should it be disjoint from other datatypes?

This occurs to me when I'm implementing it in Gauche.  We already have a ring-buffer object, using flat storage and extending capability, and I can just use it as a flexvector by just adding procedures, without defining a new datatype.

Ring-buffer isn't in any srfi so far, so there's no problem to do so NOW.  But what if we have a ring-buffer srfi in future and it also want to have a disjoint type predicate?  In general, every time we add a new datatype to srfi and it says disjoint, how much should it cover?  Types in RnRS?  All previous srfis?

These are very good points IMO. It essentially boils down to what Will Clinger once noticed in the context of some SRFI (I have forgotten which), namely that this "disjointness of the type" is not at all well-defined although part of the specification of many SRFIs.

The upshot is that R7RS large will have to be more than a collection of SRFIs. The disjointness of type predicates can only be fixed once all types are known.
 
An implementation may choose to conflate vectors and flexvectors (doing so make interaction of multiple threads complex, as was discussed earlier, but it's a choice of the implementation.)   The current srfi has an example (flexvector? (vector 1 2 3)) => #f.  Should it be so?

Allowing more freedom here looks like a good idea.