Often when I see clojure protocols in a library, the protocol methods will be wrapped in a function, often with little added functionality. e.g.:
(defprotocol Pfoo
(foo-method [this]))
(deftype Atype [x y]
Pfoo
(foo-method [this] (do-something)))
(defn foo [arg] (foo-method arg))
And clients are generally expected to call the function foo, rather than the foo-method from the protocol. (See the protocols at the top of clojurescript core for concrete examples of this kind of thing.
So why are protocols often shielded behind functions? Couldn't the protocol method become the client-facing part, rather than the wrapping function?