2.7 Object Types
(require rebellion/type/object) | package: rebellion |
syntax
(define-object-type id (field-id ...) option ...)
option = field-option | naming-option | property-option field-option =
| #:object-name-field name-field-id naming-option = #:predicate-name predicate-id | #:constructor-name constructor-id | #:accessor-name accessor-id | #:descriptor-name descriptor-id property-option =
| #:property-maker prop-maker-expr
prop-maker-expr :
(-> uninitialized-object-descriptor? (listof (cons/c struct-type-property? any/c)))
2.7.1 Object Type Information
procedure
(object-type? v) → boolean?
v : any/c
procedure
(object-type name fields [ #:object-name-field name-field #:constructor-name constructor-name #:predicate-name predicate-name #:accessor-name accessor-name]) → object-type? name : interned-symbol? fields : keyset? name-field : natural? = (keyset-index-of fields '#:name) constructor-name : (or/c interned-symbol? #f) = #f predicate-name : (or/c interned-symbol? #f) = #f accessor-name : (or/c interned-symbol? #f) = #f
procedure
(object-type-name type) → interned-symbol?
type : object-type?
procedure
(object-type-fields type) → keyset?
type : object-type?
procedure
(object-type-size type) → natural?
type : object-type?
procedure
(object-type-object-name-field type) → natural?
type : object-type?
procedure
type : object-type?
procedure
type : object-type?
procedure
type : object-type?
2.7.2 Object Type Descriptors
procedure
(object-descriptor? v) → boolean?
v : any/c
procedure
v : any/c
procedure
v : any/c
procedure
(object-descriptor-type descriptor) → object-type?
descriptor : object-descriptor?
procedure
(object-descriptor-constructor descriptor) → procedure?
descriptor : object-descriptor?
procedure
(object-descriptor-predicate descriptor) → predicate/c
descriptor : object-descriptor?
procedure
(object-descriptor-accessor descriptor)
→ (-> (object-descriptor-predicate descriptor) natural? any/c) descriptor : object-descriptor?
2.7.3 Dynamically Implementing Object Types
procedure
(make-object-implementation type [ #:property-maker prop-maker #:inspector inspector]) → initialized-object-descriptor? type : object-type?
prop-maker :
(-> uninitialized-object-descriptor? (listof (cons/c struct-type-property? any/c))) = default-object-properties inspector : inspector? = (current-inspector)
procedure
(default-object-properties descriptor)
→ (listof (cons/c struct-type-property? any/c)) descriptor : object-descriptor?
procedure
(default-object-equal+hash descriptor) → equal+hash/c
descriptor : object-descriptor?
procedure
(default-object-custom-write descriptor)
→ custom-write-function/c descriptor : object-descriptor?
procedure
(default-object-name-property descriptor) → natural?
descriptor : object-descriptor?
2.7.4 Object Type Chaperones and Impersonators
procedure
(object-impersonate instance descriptor [ #:properties properties #:chaperone? chaperone?]) → (object-descriptor-predicate descriptor) instance : (object-descriptor-predicate descriptor) descriptor : initialized-object-descriptor?
properties : (hash/c impersonator-property? any/c #:immutable #t) = empty-hash chaperone? : boolean? = #t