    (subscribe ob nf nil nil))
   ([ob nf ef]
    (subscribe ob nf ef nil))
-  ([ob nf ef cf]
+  ([^observable ob nf ef cf]
    {:pre [(observable? ob)]}
    (let [disposable (.subscribe ob nf ef cf)]
      #(.dispose disposable))))

  into one observable sequence."
  ([ob]
   (flat-map identity ob))
  ([f ob]
   {:pre [(observable? ob)]}
   (.flatMap ob #(f %))))


(defn share
  "Returns an observable sequence that shares a single
  subscription to the underlying sequence."
  [^observable ob]
  (.share ob))

(defn connect!
  "Connect the connectable observable."
  [^observable ob]
  {:pre [(connectable? ob)]}
  (.connect ob))

