 ;; ==== Async value ====
 
 (defn async-val
-  "Returns a new unrealized asynchronous value."
+  "Returns a new unrealized asynchronous value. Dereferencing will
+  cause the current thread to block until the asynchronous value is
+  realized."
   []
   (AsyncVal.))
 

             coll))))))

(defn map*
  [f coll]
  (async-seq
    (doasync coll
      (fn [[v & more]]
        (cons v (map* f more))))))

(defmacro doseq*
  [seq-exprs & body]
  (assert (vector? seq-exprs) "a vector for its binding")
  (assert (even? (count seq-exprs)) "an even number of forms in binding vector")

    #(first %)))

(defn batch
  "Alpha - subject to change

  Returns an async value that is realized with the given collection
  when all (or n if supplied) elements of the collection have been
  realized."
  ([coll] (batch Integer/MAX_VALUE coll))
