Часто, когда я вижу в библиотеке протоколы clojure, методы протокола будут завернуты в функцию, часто с небольшой добавленной функциональностью. например:.
(defprotocol Pfoo
(foo-method [this]))
(deftype Atype [x y]
Pfoo
(foo-method [this] (do-something)))
(defn foo [arg] (foo-method arg))
И как правило, клиенты обычно вызывают функцию foo, а не foo-метод из протокола. (См. Протоколы вверху clojurescript core для конкретных примеров такого рода вещей.
Итак, почему протоколы часто защищаются за функции? Не мог ли метод протокола стать частью, обращенной к клиенту, а не функцией обертывания?