Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to check if a value is a promise?

Tags:

clojure

Having:

(def x (promise))

How can I check the the type of x is a promise?

Thanks

like image 959
reshefm Avatar asked Oct 25 '25 18:10

reshefm


1 Answers

I'd say you can't generally. Because promise is created as reify of several interfaces: IDeref, IBlockingDeref, IPending, IFn. But you can check whether value implements one of them: clojure.lang.IPending.

(defn promise? [v]
  (instance? clojure.lang.IPending p))

Or maybe even all:

(defn promise? [v]
  (every? #(instance? % v) 
         [clojure.lang.IPending 
          clojure.lang.IFn 
          clojure.lang.IBlockingDeref 
          clojure.lang.IDeref]))
like image 195
Mikita Belahlazau Avatar answered Oct 27 '25 12:10

Mikita Belahlazau