- (defrecord TaggedLiteral [tag value])
- Has a print-method which does the #tagged/literal "thing"
- (defprotocol ILiteral (-literal [this]))
- Converts an object into a valid EDN structure
- Add pr, prn, pr-str, and prn-str to clojure.edn
- Implements closed set of print methods for each EDN type
- Calls -literal on every object recursively
- Throws if any object isn't one of the EDN types
An alternatively solution may replace the ILiteral protocol with a fn or map.
- Protocols are problematic for types with potentially differing representations and for non-owned types.
- Reading tagged literals is configured via two dynamic vars: 1) a map of symbols to readers and 2) a fallback function.
- Writing tagged literals could similarly be configured by a map of types to writers and a fallback function.
- That would allow for custom types to have multiple tagged literal representations depending on need.