(defun read-thing (string) (%read-thing string t)) (defgeneric %read-thing (string class) (:method-combination or)) (defmethod compute-applicable-methods ((generic-function (eql #'read-set)) args) (m:generic-function-methods #'read-set)) (defmethod %read-thing ((string string) (class (eql :foo))) (when (string= string "foo") :foo)) (defmethod %read-thing ((string string) (class (eql :bar))) (when (string= string "bar") :bar)) (defmethod %read-thing ((string string) (class (eql :baz))) (when (string= string "baz") :baz)) (defun test-me () (list (read-thing "foo") (read-thing "bar") (read-thing "baz")))