- ;; REMOVEME: old version
- #|
- (let ((certain? t))
- (etypecase type
- (union-type
- (dolist (mem (union-type-types type) (values nil certain?))
- (multiple-value-bind (val win) (ctypep obj mem)
- (if win
- (when val (return (values t t)))
- (setf certain? nil)))))
- (intersection-type
- (dolist (mem (intersection-type-types type)
- (if certain? (values t t) (values nil nil)))
- (multiple-value-bind (val win) (ctypep obj mem)
- (if win
- (unless val (return (values nil t)))
- (setf certain? nil)))))))
- |#
- (let ((types (compound-type-types type)))
- (etypecase type
- (intersection-type (every/type #'ctypep obj types))
- (union-type (any/type #'ctypep obj types)))))
+ (funcall (etypecase type
+ (intersection-type #'every/type)
+ (union-type #'any/type))
+ #'ctypep
+ obj
+ (compound-type-types type)))