   (reduce product rels)) ;; TODO check for empty rels
 
 
-;; union
-
-
-(defn union [rel1 rel2]
-  (throw (ex-info "Not implemented" [rel1 rel2])))
-
-
 ;; hash-join
 
 

    (mapa offset-map syms))
  (-copy-tuple [_ tuple idxs target target-idxs]
    (dotimes [i (shim/alength idxs)]
      (shim/aset target (shim/aget target-idxs i) (shim/aget tuple (shim/aget idxs i))))))

#?(:clj
   (defmethod print-method ArrayRelation [rel w]

                    (instance? BindIgnore %))
               (:bindings binding))))


(defprotocol IBinding
  (-in->rel [binding value]))


(extend-protocol IBinding
  BindIgnore
  (-in->rel [_ _]
    (singleton-rel))
  
  
  BindScalar
  (-in->rel [binding value]
    (array-rel [(get-in binding [:variable :symbol])] [(shim/array value)]))
  
  
  BindColl
  (-in->rel [binding coll]
