Проблема в том, что компилятор не отслеживает тип def
'dars. Так что да, в вашем простом примере это было бы возможно. Но как часто вы передаете буквальный? Редко, в реальной программе.
Чтобы сделать типы "текущими", как в реальном статически типизированном языке, потребовалось бы значительное количество переделок. Вам придется отслеживать информацию о типах с помощью переменных, динамически восстанавливать переменные, разыменования и т. Д. И тогда у вас все еще возникает проблема извлечения элементов из коллекций / последовательностей, что подразумевает обобщенные типы, то есть огромный банка червей ...
Аннотации типов в Clojure никогда не предназначались для обеспечения безопасности типов во время компиляции - они просто позволяют компилятору генерировать более оптимизированный код (за счет ошибки времени выполнения при обнаружении непредвиденного типа.)
Возможно, будет возможно снабдить компилятор полной статической типизированной информацией, но на этом этапе вы в значительной степени переписали язык, и вам придется принимать множество решений и компромиссов в отношении того, как обрабатываются типы. Это действительно не было бы Clojure больше.