Comments on draft 6 Wolfgang Corcoran-Mathe (15 Sep 2026 01:17 UTC)
Re: Comments on draft 6 D Guthrie (21 Sep 2026 13:46 UTC)

Comments on draft 6 Wolfgang Corcoran-Mathe 15 Sep 2026 01:16 UTC

Hi Duncan,

Thanks for working so hard on this SRFI.  It is more than I can keep in
my head, unfortunately, but it has clearly been written with care.  I
have a few minor issues:

1. Pedantry: The R7RS example in the “R6RS Conditions” section uses
square brackets, which are “reserved for possible future extensions”
by R7-small.  Of course it’s clear what they mean, but, strictly
speaking, they make the example invalid R7RS-small code.

2. Awkward argument names: Why isn’t the common ‘nonempty-ini?’
argument called ‘nonempty-initial?’ or ‘nonempty-init?’ instead?
(Is this a tribute to the ‘creat’ of UNIX infamy?)

3. I don’t understand why there are two-argument versions of
‘update-iri-authority’ and ‘update-uri-authority’.  If I understand
correctly, ‘(update-iri-authority IRI #f)’ is the only valid use of the
this form, and it’s equivalent to ‘(update-iri-authority IRI #f #f #f)’.
It seems to me the #f argument isn’t doing anything.  You could get rid
of the two-argument version, or replace it with a one-argument version,
‘(update-iri-authority IRI)’.

In passing, I note that only the two-argument version of
‘update-uri-authority’ is mentioned in the “URI programming interface”
list.

4. The types of some arguments are specified neither in the procedure
spec. nor in the “Argument restrictions and convention” (that section
name needs a final ‘s’, too):

  * update-iri-authority: *user*, *host*, & *port* are of unspecified
    type, except we know they may be false.

  * resolve-iri, etc.: *base* (clarified by the ‘relativize-iri’ spec.,
    possibly: that procedure’s *base* argument must be non-relative,
    which I suppose applies to all *base* arguments.)

  * encode-string, etc.: *char-set*.  Of course character sets are
    discussed later, but it wouldn’t hurt to clarify the type of this
    argument.  (Most likely it should be added to the “restrictions &
    conventions”.  It’s used often enough.)

5. What does ‘path-ref’ do when the index argument is invalid?  The
example (non-normative, I suppose) says “ERROR”.

6. General: (srfi :275 path) seems very large; in particular, there are
a lot of constructors.  I’m probably missing something, but are all the
‘vector->’ constructors needed in addition to the more general
‘build-path’?  (The usefulness of the ‘string->’ constructors I
appreciate.)  And are all those predicates needed, too?

* * *

Thanks again for all your work.  I’m probably missing a lot of
important details, but hopefully the other, more *RI-knowledgeable
commentators have gotten to them.

--
Wolfgang Corcoran-Mathe  <xxxxxx@sigwinch.xyz>