   "Bypasses elements in an observable sequence as long
   as a specified condition is true and then returns the
   remaining elements."
-  [f ob]
+  [f ^observable ob]
   {:pre [(observable? ob) (fn? f)]}
   (.skipWhile ob #(boolean (f %))))
 
 (defn skip-until
   "Returns the values from the source observable sequence
   only after the other observable sequence produces a value."
-  [pob ob]
+  [pob ^observable ob]
   {:pre [(observable? ob) (observable? pob)]}
   (.skipUntil ob pob))
 

(defn on-end
  "Subscribes a function to invoke upon graceful termination
  of the observable sequence."
  [ob f]
  {:pre [(observable? ob)]}
  (let [disposable (.subscribeOnCompleted ob #(f %))]
    #(.dispose disposable)))

  observables."
  ([pauser ob]
   (pausable pauser false ob))
  ([pauser buffer? ob]
   {:pre [(observable? ob) (observable? pauser)]}
   (if buffer?
