On this page:
define-object-type
2.7.1 Object Type Information
object-type?
object-type
object-type-name
object-type-fields
object-type-size
object-type-object-name-field
object-type-constructor-name
object-type-predicate-name
object-type-accessor-name
2.7.2 Object Type Descriptors
object-descriptor?
initialized-object-descriptor?
uninitialized-object-descriptor?
object-descriptor-type
object-descriptor-constructor
object-descriptor-predicate
object-descriptor-accessor
2.7.3 Dynamically Implementing Object Types
make-object-implementation
default-object-properties
default-object-equal+  hash
default-object-custom-write
default-object-name-property
2.7.4 Object Type Chaperones and Impersonators
object-impersonate
7.7

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

(object-type-predicate-name type)  interned-symbol?

  type : object-type?

procedure

(object-type-accessor-name type)  interned-symbol?

  type : object-type?

2.7.2 Object Type Descriptors

procedure

(object-descriptor? v)  boolean?

  v : any/c

procedure

(initialized-object-descriptor? v)  boolean?

  v : any/c

procedure

(uninitialized-object-descriptor? v)  boolean?

  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
Returns an impersonator of instance with each impersonator property in properties attached to it. If chaperone? is true (the default), the returned impersonator is a chaperone.