Clojure has a feature called Metadata i.e. data about data. Using metadata it is possible to add a map with some information to some objects like symbols and collections.
The API for metadata is pretty basic-
with-meta - Set the metadata map. The reader macro ^ can also be used instead of the meta function. Multiple ^ macros can be cascaded.
meta - Get the metadata map set for the object or nil
Clojure source uses metadata for annotating various artifacts. Some keys are :doc, :added (equivalent to javadoc @since), :static, :dynamic, :arglists.
The java interfaces that declare metadata support are
withMeta with the map object and
meta returns the map.
IObj is a super interface for multiple clojure types.