Is there a way to get the type-id of a type, though, and register types in the hashtable as opposed to objects? Do I have to actually create an instance of each object to get their type-ids?
You need to specify a type-exhibitor in the type definition. In the following example the type definition will create a function called "person-type" that returns the type-descriptor of the person type.
(define-type person
id: 4b587cfe-f6fc-41cf-953b-f5743fb219ce type-exhibitor: person-type name birthdate)
(define p (make-person "foo" 2004)) (##structure-type p)
#<type #2 person>
(person-type)
#<type #2 person>
If you want to see what a define-type expands into, just use "pp" like this:
(pp (lambda () (define-type point x y) 999))
(lambda () (letrec ((##type-2-point (##structure ##type-type (##make-uninterned-symbol "##type-2-point") 'point 8 #f '#(x 0 #f y 0 #f) '#(1 2))) (make-point (lambda (p1 p2) (##structure ##type-2-point p1 p2))) (point? (lambda (obj) (##structure-direct-instance-of? obj (##type-id ##type-2-point)))) (point-x (lambda (obj) (##structure-ref obj 1 ##type-2-point point-x))) (point-x-set! (lambda (obj val) (##structure-set! obj val 1 ##type-2-point point-x-set!))) (point-y (lambda (obj) (##structure-ref obj 2 ##type-2-point point-y))) (point-y-set! (lambda (obj val) (##structure-set! obj val 2 ##type-2-point point-y-set!)))) 999))
Marc