似乎 Clojure 编译器默认不这样做:Clojure 编译器是否检查记录和类型是否实现协议?
有没有可以做到这一点的 Lein 插件?
令人惊叹的core.typed
引入了“Clojure 的可选类型系统”,您可以在他们的官方网站上看到。
具体来说,您可能想要使用自己的defprotocol
宏(来自 core.typed wiki):
协议定义应该使用 clojure.core.typed/defprotocol,其语法让人想起 defprotocol 和类型化 fn:
(defprotocol IUnifyWithLVar (unify-with-lvar [v u :- LVar s :- ISubstitutions] :- (U ISubstitutions Fail)))
支持多态协议:
(defprotocol [a b] Lens (-fetch [l x :- a] :- b) (-putback [l x :- a v :- b] :- a))
安装后,您可以通过 leiningen使用lein typed check
. 明显的缺点是您必须注释您的代码。这是通过使用静态类型检查来提高代码安全性所付出的代价。
您可能还对函数satisfies?
和感兴趣instance?
。