(defstruct (foo (:print-function print-foo))
  value)

defun print-foo (f s d)
 (declare (ignore d))
 (print-unreadable-object (f s :type t :identity t)
   (format s "~A" (foo-value f))))

(defmethod make-load-form ((f foo) &optional env)
  (declare (ignore env))
  `(make-foo :value ',(foo-value f)))

(defmacro define-foo (name value)
  `(defparameter ,name ',(make-foo :value value)))





