当前,clojure.spec.alpha
在 Clojure 核心中占据着特权地位,能够作为核心库对宏进行配置,同时对函数也进行配置。Compiler.java
依靠 clojure.spec.alpha
在此函数上,特别调用 macroexpand-check。这是一种巧妙的交互,而 macroexpand-check
简单明了。
其他工具(如 Malli)可以通过 alter-var-root
(如在 malli.instrument/-strument!中看到)为 Clojure 函数提供配置,但它们缺少挂钩到宏扩展的能力。
如果 Compiler.checkSpecs
有一些钩子,则允许像 Malli 这样的工具用于配置宏会很好。