
;; (sysoos!define-class 'cla8 '(x y z) '())
;; (sysoos!define-class 'cla '((x slot1) y (z "Slot3")) '())

(sysoos!define-class 'object ()())
(sysoos!define-class 'mixin-top () '(object))
(define-mixin number-mixin ())
(define-mixin string-mixin ())
(define-mixin list-mixin ())

;; (sysoos!define-class 'point () '(object))
;; (sysoos!define-class 'xy-point '((x 0) (x 0)) (list 'point))
;; (sysoos!define-class 'polar-point '((length 0) (angle 0)) (list 'point))


(sysoos!define-class 'number () '(object number-mixin))
(sysoos!define-class 'integer () '(number))
(sysoos!define-class 'float () '(number))

(sysoos!define-class 'string () '(object string-mixin))
(sysoos!define-class 'symbol () '(object string-mixin))
(sysoos!define-class 'cons () '(object list-mixin))
(sysoos!define-class 'char () '(object))
(sysoos!define-class 'vector () '(object))
(sysoos!define-class 'procedure () '(object))
(sysoos!define-class 'procedure () '(procedure))
(sysoos!define-class 'closure () '(procedure))
(sysoos!define-class 'null () '(object list-mixin))
(sysoos!define-generic-method 'class-name)

;; (sysoos!define-method 'point 'len (lambda (object) "length"))
;; (sysoos!define-method 'point 'xy-point-p (lambda (object) #f))
;; (sysoos!define-method 'xy-point 'xy-point-p (lambda (object) #t))
;; (sysoos!define-method 'point 'p-add (lambda (object x y) (display object)(newline)(+ x y)))
