On 2-Jun-09, at 12:24 AM, lowly coder wrote:
are there any amcros that play well with destructuring bind of define-type's ? I just want to check to see if there's a pre- existing solution before re-inventing my own.
I find myself writing way too much code of the form:
(define-type foo a b) (define-type bar c d)
(lambda (x) (let ((c (bar-c x) (d (bar-d x))) (let ((a (foo-a a) (b (foo-b b)) ...
Try this (but beware that the API for the ## procedures may change in the future):
(define-macro (def-type . args) (##define-type-parser 'def-type #f args (lambda (name flags id extender constructor constant-constructor predicate implementer type-exhibitor prefix fields total-fields) (let ((field-names (map car fields))) `(begin (define-type ,@args) (define (,(##symbol-append 'with- name) obj proc) (proc ,@(map (lambda (f) `(,(##symbol-append name '- f) obj)) field-names))))))))
(def-type point x y)
(define p (make-point 11 22))
(with-point p (lambda (x y) (pp (list 'x+y= (+ x y)))))
Marc