Этот вопрос тесно связан с этим , но я думаю, что он более общий.
Недавно я пытался создавать «экземпляры» типа «на лету» с помощью различных методов (или, если возможно, с помощью уникального конструктора функций) на основе тега метаданных. Я связал тип (класс java под капотом) с этим тегом, и тогда я не знал, как продолжить элегантным способом (без eval или java-отражения и строк); new - это особая форма, и с ней трудно работать, несмотря на то, что вы используете макросы.
В seudo-code это будет:
(def my-tagged-data (with-meta my-data {:my-type-tag my-ns.My-Type}))
(def factory-function [tagged-data]
(create (:my-type-tag (meta tagged-data)) tagged-data))