Name clause Marc Nieper-Wißkirchen (02 Nov 2022 15:07 UTC)
Re: Name clause Marc Nieper-Wißkirchen (03 Nov 2022 19:51 UTC)

Re: Name clause Marc Nieper-Wißkirchen 03 Nov 2022 19:50 UTC

Am Mi., 2. Nov. 2022 um 16:07 Uhr schrieb Marc Nieper-Wißkirchen
<xxxxxx@gmail.com>:
>
> 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)
>   ....)

I decided on the second option.  It is now in the spec and implemented
in my personal repo.

>
> Marc