+(define-layered-function display-attribute (object attribute)
+ (:method (object attribute)
+ (display-using-description attribute *display* object)))
+
+(define-layered-function display-attribute-label (object attribute)
+ (:method (object attribute)
+ (format *display* "~A " (attribute-label attribute))))
+
+(define-layered-function display-attribute-value (object attribute)
+ (:method (object attribute)
+ (let ((val (attribute-value attribute)))
+ (if (eql val object)
+ (format *display* "~A " val)
+ (with-active-descriptions (inline)
+ (display *display* val))))))
+
+(define-layered-method display-using-description
+ ((attribute standard-attribute) display object &rest args)
+ (declare (ignore args))
+ (when (attribute-label attribute)
+ (display-attribute-label object attribute))
+ (display-attribute-value object attribute))
+