(defmacro define-food-box (name food-type : supers . clauses) (unless (subtypep food-type 'edible) (error "~s requires edible type, not ~s" %fun% food-type)) ^(defstruct ,name ,supers food (:method set-food (me food) (unless (typep food ',food-type) (error "~s: requires ~s object, not ~s" %fun% ',food-type food)) (set me.food food)) ,*clauses))