   "Returns a cancellable promise that will be fulfilled with this
   promise's fulfillment value or rejection reason.  However, if this
   promise is not fulfilled or rejected within `ms` milliseconds, the
-  returned promise is cancelled with a TimeoutError"
+  returned promise is cancelled with a TimeoutError."
   ([p t] (timeout p t ::default exec/default-scheduler))
   ([p t v] (timeout p t v exec/default-scheduler))
   ([p t v scheduler]

(defmacro ->
  "Like the clojure.core/->, but it will handle promises in values
  and make sure the next form gets the value realized instead of
  the promise. Example using to fetch data in the browser with CLJS:

  Example:

  (p/-> (js/fetch #js {...}) ; returns a promise
        .-body)


(defmacro future
  "Analogous to `clojure.core/future` that returns a promise instance
  instead of the `Future`. Useful for executing synchronous code in a
  separate thread (also works in cljs)."
  [& body]
  `(c/-> (exec/submit! (fn []
