      :clj  (let [more (clojure.core/filter identity more)]
              (cond
                (every? observable? more)
-               (clojure.core/reduce #(Observable/concat %1 %2) more)
+               (->> (clojure.core/map as-observable more)
+                    (clojure.core/reduce #(Observable/concat %1 %2)))
 
                (every? flowable? more)
-               (clojure.core/reduce #(Flowable/concat %1 %2) more)
+               (->> (clojure.core/map as-flowable more)
+                    (clojure.core/reduce #(Flowable/concat %1 %2)))
 
                :else
-               (throw (ex-info "Invalid arguments." {}))))))
+               (throw (IllegalArgumentException. "items should be a list of observables or flowables"))))))
 
 (defn merge
   "Merges all the observable sequences and Promises

                           (let [v (xsink nil input)]
                             (when (reduced? v)
                               (xsink @v))))
                    disposable (on-value stream step)]
                (on-complete stream #(do (xsink nil)
                                         (sink end)))
                (fn []
                  (cancel! disposable)))))))


         (boolean (f v))))))

#?(:clj
   (defn- as-function
     "Wrap the provided function into a Function instance."
     ^Function
     [f]
