Re: Record-type predicate
Marc Nieper-WiÃkirchen 22 Jul 2016 11:23 UTC
Am 18.07.2016 um 21:47 schrieb Takashi Kato:
>> I don't see a way to get meta-data about a procedure other than
>> calling it. But this may be disastrous if an unknown procedure is
>> called.
> That's one of my concern. And I would like to raise an error if spec
> (the SRFI) says "it is an error" however if there's no way to detect
> so that's also impossible.
For a native implementation of SRFI 136, a predicate could be of a
subtype of procedure. That is a type whose values fulfill the predicate
procedure? and, say, record-type-predicate? For such a type, a native
procedure that retrieves meta-information could be defined.
For an implementation that implements SRFI-17, this shouldn't be too hard.
>
>> For compatibility with SRFI-9 and R7RS-small, it has to return #t.
> Ok, as I expected (and made my life harder).
>
>> Do you have a use case in mind where it is crucial to hide
>> these things from the user?
> One of my thing is integration to R6RS (or even underlying object
> system). As long as I can get the meta-data, then it is possible
> to implement this SRFI on top of the existing object system (at
> least on Sagittarius). To me, it's convenient if somewhat
> meta-data object is defined (it doesn't have to be specified what
> to have, like syntax object defined on R6RS).
The primary meta-data object is the record-type descriptor, which is a
keyword. As the procedural interface cannot access a keyword, I chose
the predicate as a substitute for it for the procedural layer.
If you do think that this is ugly or hard to implement, we should
discuss the following changes/clarifications to SRFI 136:
- A record has an expand-time record-type descriptor, and an associated
evaluation-time record-type descriptor.
- The expand-time rtd is the keyword <type name> bound by
(define-record-type <type spec> ...).
- The macro use (<type name>) expands into the evaluation-time rtd.
(Currently: The predicate is the evaluation-time rtd.)
- In the procedural layer, one makes use of the evaluation-time rtd to
refer to record-types (Currently: predicate).
- Contrary to the predicate, the evaluation-time rtd would belong to a
disjoint type.
Best,
Marc
>
>
> Cheers,
>