Clojure перегруженный метод разрешения для Longs

Такое поведение не имеет смысла для меня:

user=> (type 1)
java.lang.Long
user=> (type (cast Long 1))
java.lang.Long
user=> (type 1)
java.lang.Long
user=> (type (Long. 1))
java.lang.Long
user=> (type (cast Long 1))
java.lang.Long
user=> (BigDecimal. 1)
1M
user=> (BigDecimal. (Long. 1))
CompilerException java.lang.IllegalArgumentException: More than one matching method found: java.math.BigDecimal, compiling:(NO_SOURCE_PATH:22) 
user=> (BigDecimal. (cast Long 1))
1M

Почему(BigDecimal. (Long. 1)) case не может найти однозначную сигнатуру метода сопоставления, в то время как два других выражения -которые имеют точно такой же тип аргументадобиться успеха?

Обновить:

Что я нахожу дажеБольше странно в этом поведении то, чтоLong тип:

user=> (BigDecimal. (Long. 1))
CompilerException java.lang.IllegalArgumentException: More than one matching method found: java.math.BigDecimal, compiling:(NO_SOURCE_PATH:1) 
user=> (BigDecimal. (Integer. 1))
1M

Ответы на вопрос(2)

Ваш ответ на вопрос