anchor.diff:              :return-spec (mapcar #'type-spec->type
                                    (uiop:ensure-list (third spec)))
               :flow-ids flow-id))
  +          ((and (listp spec) (eq (first spec) 'or))
  +           (gen-or-type flow-id (rest spec)))
             ((and (listp spec) (vtype-existsp (first spec)))
              (destructuring-bind (type dimensions) spec
                (make-instance 'v-array :element-type (if (keywordp type)
  
positive.code: 
  (defmethod print-object ((obj v-or) stream)
    (format stream "#<OR ~{~s~^ ~}>" (mapcar #'type->type-spec (v-types obj))))
  
  ;; {TODO}
  ;; - or of 1 type is that type
  ;; - or of n v-type-eq types is that type
  ;; - or of 'or's is a flatten
  
  ;;------------------------------------------------------------
  ;; Any one of
  
negative.code: (defmethod type->type-spec ((type v-or))
    `(or ,@(mapcar #'type->type-spec (v-types type))))
  
  (defmethod gen-or-type (flow-id types)
    (let* ((types (mapcar (lambda (type)
                            (etypecase type
                              (v-type type)
                              ((or list symbol)
                               (type-spec->type type (flow-id!)))))
                          types))
           (reduced (reduce-types-for-or-type types)))
      (if (= (length reduced) 1)
          (first reduced)
          (make-instance 'v-or :types reduced :flow-ids flow-id))))
  
  (defmethod reduce-types-for-or-type (types)
    (labels ((inner (type)
  