   (:require [goog.object :as obj])
   (:require-macros meta.promise))
 
+;; Promise Protocol ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
 (defprotocol IPromise
   "A simple protocol implementation for JavaScript Promises.
 

      (.then (next)
        (fn [result]
          (cljs.core/conj data result))))))

;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defn promise
  "Returns a new promise, optionally accepts a function as a promise constructor.


  (err     [_]          "Catch and output the error of a promise.")
  (map     [_ func]     "Map a function to the result of the previous promise.")
  (conj    [_ data]     "Conj data onto the result of the previous promise."))
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;

;; Helpers ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
(defn- promise-serial [current next]
