免责声明
尽管有标题,但这是一个真正的问题,而不是 Emacs/Vi 火焰大战的尝试。
语境
我已经使用 Haskell 几个月了,并编写了一个小型的 ~10K LOC 解释器。在过去的一年里,我切换到了 Clojure。有一段时间,我为 Clojure 缺乏类型而苦苦挣扎。然后我切换到在 Clojure 中使用 defrecords,现在切换到 Clojure 的 defprotocols。
我真的很喜欢defprotocols。其实不止种类。
我现在正处于我的 Clojure 函数的地步,因为它是文档字符串,我只是指定:
* the protocols of the inputs
* the protocols of the outputs
使用它,我现在似乎有一个临时类型系统(不是编译器检查;而是人工检查)。
问题
我怀疑我缺少一些关于类型的东西。类型通过协议提供什么?