In Clojure, some tasks (such as instantiating a PersistentQueue
or using deftype
to implement a custom data type that is compatible with the clojure.core
functions) require knowledge of the classes and/or interfaces in clojure.lang
.
However, according to clojure.lang/package.html
:
The only class considered part of the public API is
clojure.lang.IFn
. All other classes should be considered implementation details.
Are these statements incorrect or outdated? If so, are there plans to correct them in the future? If not, is there a more preferred way to perform the tasks mentioned above, or should they simply not be done at all in idiomatic Clojure code?
Alex Miller has commented on this in the past (the whole thread is worth reading though):