[R6RS] R6RS records: non-generative record type descriptor identity

Marc Feeley feeley
Sat Aug 27 09:59:40 EDT 2005

The specification of make-record-type-descriptor contains this

     When make-record-type-descriptor is called repeatedly with
     the same uid argument (in the sense of eq?), all other arguments
     to make-record-type-descriptor must also be the same (in the sense
     of equal?), and the same record-type descriptor (in the sense of
     eq?) is returned every time.

To clarify the meaning of this passage, the meaning of equal? on type
descriptors (the parent argument) must be defined explicitly in the

Moreover I don't see why the same type descriptor (in the sense of
eq?) must be returned every time since there are no mutation
operations on type descriptors.  This constraint requires the
implementation to keep a table (e.g. a weak hash table) of the record
type descriptors in the system.  This is a burden (in implementation
complexity) for some Scheme implementations.  We could define record
type equality using equal?, i.e. two record type descriptors represent
the same record type iff the record type descriptors are equal?.  Of
course implementations of Scheme which have weak hash tables may
choose to return the same record type descriptor in the sense of eq?.

Concerning the constraint

     If a call with the same uid differs in any argument, an error
     is signaled.

I don't think the "name" argument should be considered to be part of
the type since "it has purely informational purpose".  I can even  
users varying the name of *a* given type based on linguistic preference.

Moreover, I would prefer "It is an error if a call with the same uid
differs in any argument." to allow implementation specific extensions,
such as documentation information that has a purely informational

Finally, if we want to avoid gratuitous uid clashes, the specification
should advocate a procedure for choosing "unique" uids.  This is
motivated by our objective to allow easy sharing of code.  We could
for example suggest using symbols containing a UUID suffix (see


More information about the R6RS mailing list