(defn >!!
"puts a val into port. nil values are not allowed. Will block if no
buffer space is available. Returns true unless port is already closed."
[port val]
(let [p (promise)
ret (impl/put! port val (fn-handler (fn [open?] (deliver p open?))))]
(if ret
@ret
(deref p))))