Both the R6RS and the R7RS define-record-type syntaxes have one
limitation in common: The record name (useful for inspection or
debugging) is always the symbolic name of the identifier the <record
name> is bound to.
This is problematic if the identifier should be bound to something
else without renaming the record name as in the following example:
(define-record-type thunk
(fields proc)
(protocol
(lambda (p)
(lambda (proc) (assert (procedure? proc)) (p proc)))))
(define-syntax thunk
(syntax-rules ()
[(_ body ...) (make-thunk (lambda () body ...)]))
Unless one has local modules allowing local renaming exports, the only
way out is to use the renaming facility of the library system.
Thus I propose the addition of a
(name <symbol>)
clause (for the R6RS syntax and the proposed extension of the R7RS) to
specify the record name explicitly. The above record-type definition
can then be corrected:
(define-record-type (<thunk> make-thunk thunk?)
(name thunk)
(fields proc)
...)
Alternatively, we could extend the <name spec> (see the R6RS document)
so that it allows to separate name and bound identifier:
(define-record-type (thunk <thunk>)
(fields proc)
....)
Marc