   or array/iterable into one observable sequence.
 
   In other languages is called: flatMap or mergeMap."
-  ([ob] (merge-map identity ob))
-  ([f ob] (pipe ob (.flatMap rxop #(f %)))))
+  [f ob]
+  (pipe ob (.flatMap rxop #(f %))))
 
 ;; Aliases
 (def fmap merge-map)

  [e]
   (.throwError rx e))

(defn timer
  "Returns an observable sequence that produces a value after
  `ms` has elapsed and then after each period."
  ([delay]
   (.timer rx delay))
  ([delay period]
   (.timer rx delay period)))

(defn timeout
  "Returns the source observable sequence or the other
  observable sequence if dueTime elapses."
  ([ms ob]
   (pipe ob (.timeout rxop ms)))
  ([ms other ob]
   (pipe ob (.timeoutWith rxop ms other))))

(defn delay
  "Time shifts the observable sequence by dueTime. The relative

  (-on-error [_ error] "Subscription error notification hook.")
  (-on-end [_] "Subscription termination notification hook."))

(defprotocol IDisposable
  (-dispose [_] "dispose resources."))

(defn dispose!
  "Dispose resources acquired by the subscription."
  [v]
  (-dispose v))

;; Alias
(def unsub! dispose!)
(def cancel! dispose!)

(defn- wrap-disposable
  [disposable]
  (specify! disposable
    IFn
    (-invoke ([this] (-dispose this)))
    IDisposable
    (-dispose [this]
      (.unsubscribe this))))

(defn subscribe-with
