struct->alist added by sjamaan on Sun May 18 15:02:46 2014
(define (struct->alist x)
(define (f t g x)
(cons t (alist-map struct->alist (g x))))
(let-syntax ((check-structs
(er-macro-transformer
(lambda (e r c)
(let* ((types (cdr e)))
`(,(r 'cond)
,@(map (lambda (t)
(let ((pred? (symbol-append t '?))
(tag (symbol-append '< t '>))
(->alist (symbol-append t '->alist)))
`((,pred? x) (f ',tag ,->alist x))))
types)
(else x)))))))
(check-structs pie cake)))