anchor.diff:    (%promise-wait promise :done)
     (values-list (promise-%values promise)))
   
  -(defmacro plet ((&rest bindings) &body body)
  +(defmacro parallel:let ((&rest bindings) &body body)
     (let ((temporaries (loop for (name value) in bindings
                              collect `(,(gensym "PROMISE") (promise (lambda ()
                                                                       ,value))))))
  
positive.code:   (future:wait future :done)
    (values-list (future-%values future)))
  
  (defmacro future-bind ((&rest bindings)
                         &body body)
    (let ((wait nil))
      (when (eql :wait (car body))
        (setf wait t)
  
negative.code: (defpackage "PARALLEL"
    (:use)
    (:export "PROMISE" "PROMISE-VALUE" "LET"
             "FUTURE" "FUTURE-VALUE" "BIND"
             "DOTIMES" "MAP" "REDUCE"))
  
  (defpackage "PARALLEL-IMPL"
    (:use "CL")
    (:import-from "PARALLEL" "PROMISE" "PROMISE-VALUE"
                  "FUTURE" "FUTURE-VALUE"))
  
  (in-package "PARALLEL-IMPL")
  
  (deftype status ()
    `(member :waiting :done))
  