   (Pipeline. (reverse stages) catchers finalizer))
 
 (defn join
+  "Returns an asynchronous value representing the realization of the
+  supplied arguments. The returned asynchronous value will be realized
+  with the realized values of the supplied arguments in the same order
+  or, if any of the suppplied arguments become aborted, it will be
+  aborted with the same exception."
   [& args]
   (Join. args))
 

(ns momentum.core.async
  (:use
   momentum.core.atomic)
  (:import

;; ==== Async seq ====

(defmacro async-seq
  "Takes a body of expressiosn that returns an asynchronous value,
  ISeq, or nil, and yields a Sequable asynchronous value that will
  invoke the body only the first time a callback is registered or it
  is dereferenced, and will cache the result and return it on
  subsequent calls to seq."
  [& body]
  `(AsyncSeq. (fn [] ~@body)))

(defn async-seq?
  "Returns true if x is an async-seq."
  [x]
  (instance? AsyncSeq x))

(defn- realize-coll
  [coll ms]
