[Oops.  I screwed up the SRFI 140 address, so resending to all three mailing lists.  Please reply to this copy.]

Here's the general outline for yet another string library SRFI that is meant to serve as a compromise between SRFI 140 and SRFI 152, while remaining fully compatible with R7RS-small.  I'm proposing this in order to try to break the deadlock between SRFI 152 and SRFI 140 advocates.

1) The SRFI 140 distinction between mutable and immutable strings is accepted.  However, although it is an error to attempt to mutate an immutable string. implementations are allowed not to support the distinction between mutable and immutable strings.  In such implementations, all strings are mutable, and there is no guarantee of O(1) behavior.  This is pretty much the SRFI 13 position.

2) The SRFI 140 istring? predicate is replaced with an mstring? predicate.  This returns #t on any string that is in fact mutable; on systems without a distinction it returns #t on all strings.

3) Except as noted, all procedures accept either mutable or immutable strings and return immutable strings.  However, make-string and string-copy return mutable strings, and string-set!/fill!-copy! accept only mutable strings.

4) The SRFI 140 procedures string-upcase, string-downcase, string-foldcase, and substring are renamed to istring-upcase, istring-downcase, istring-foldcase, and isubstring respectively.  In that way they do not collide with the R7RS versions, which return mutable strings.  In implementations without a distinction, these procedures are of course the same.

5) A new make-istring procedure is added to create immutable strings that consist of the same character repeated: the fill argument is required rather than optional.

6) The SRFI 118/140 procedures string-append! and string-replace! are made into linear-update procedures: that is, they always return a mutable string, which may or may not be the same (in the sense of eqv?) to the argument string.

Comments?
-- 
John Cowan          http://vrici.lojban.org/~cowan        xxxxxx@ccil.org
"Awk!" sed Grep. "A fscking python is perloining my Ruby; let me bash
    him with a Cshell!  Vi didn't I mount it on a troff?" --Francis Turner