(fn? x)
Returns true if x implements Fn, i.e. is an object created via fn.
user=> (fn? 5)
false
user=> (fn? inc)
true
user=> (fn? (fn []))
true
user=> (fn? #(5))
true
;; Even though maps, sets, vectors and keywords behave as functions:
user=> ({:a 1} :a)
1
;; fn? still returns false for them because they are not created using fn:
user=> (fn? {:a 1})
false