По мотивам предыдущей темы хочу полюбопытствовать как оно работает. Имеется модуль А, содержащий
(defprotocol MyProt
(bar [a b]))
(defn foo
...
(bar ...)
...)
Имеется модуль Б, использующий модуль А следующим образом
(extend-type clojure.lang.IPersistentMap
MyProt
(bar [a b] ...
(defn what-else
...
(foo ...)
...)
Так вот. Если загрузить модуль Б в nREPL и вызвать функцию what-else, то сыпется на следующем
No implementation of method: :bar of protocol: #'user/MyProt found for class: clojure.lang.PersistentArrayMap
Но если загрузить в nREPL ещё и модуль А, не меняя при этом область видимости, и повторить вызов
what-else, то всё замечательно заработает.
lein test естественно тоже валится на этом.
Вопрос: как так устроен этот чудо extend-type, что твориться такая ересь?