References / See Also

In Clojure 1.4 it is an error to have an unknown tagged literal. The open issue CLJ-927 discusses a possible way to support unknown tags. My suggestion is to return a map that preserves the unknown tag and the data. For example, if there's no data-reader for #point [0 1] the result would be something like {:unknown-literal point :value [0 2]}. The map can also take metadata if you want to preserve some information about the source.

Another way to handle an unknown tag would be to support a catch-all key (say 'default) that allows the programmer to handle unknown keys. The associated function should take two arguments: the tag and the literal value. If there is no 'default key in *data-readers*, then an error would be thrown (same as Clojure 1.4).

Regarding "Ambiguous with record constructors", see CLJ-1100 "Reader literals cannot contain periods". As of Clojure 1.5 beta2, # followed by a qualified symbol with a period in the name is considered a record and causes an exception for the missing record class. With the patch for CLJ-1100, only non-qualified symbols containing periods are considered records. That allows user-defined qualified symbols with periods in their names to be used as data reader tags.