I would say do one of: - define your own constructor functions like (defn user [id] ...) - use the map->User constructors created by defrecord - do not specify the non-required keys as fields in the defrecord - use plain maps
On Friday, May 23, 2014 4:47:43 PM UTC-4, Elliot wrote: > > There seem to be two kinds of definitions of what a record could be: > > 1. A full representation of a resource,e.g. (defrecord User [id name age > gender address]) > 2. A *handle* to a resource, e.g. (defrecord User [id]), e.g. [wikipedia] > below > > Some protocols only ever need a handle, not the full resource, e.g.: > > (retrieve-from-datomic (->User 42) > > But other protocols need a complete representation, e.g.: > > (produce-edn-for-api (->User 42 "John Doe" 64 ...) > > Is there an idiomatic approach to solving this problem? It seems like the > options are: > > A. Define complete representations (#1 above) everywhere, and only > partially fill them in when used as handles (e.g. (->User 42 nil nil nil > nil). This seems somewhat annoying and worse, makes it unclear what > exactly is the data expected as I/O for a given function, which was > original point of making a named, well-defined data structure. > > B. Define two separate but related records (e.g. UserHandle vs. User). > This is also somewhat annoyingly duplicative, especially since every > protocol implemented by UserHandle will need to be re-implemented by User > (though it could be a simple delegation thereto). > > Is there a standard and/or satisfying way to solve this? Thanks. > > - Elliot > > > [wikipedia] http://en.wikipedia.org/wiki/Handle_%28computing%29 > > > -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en --- You received this message because you are subscribed to the Google Groups "Clojure" group. To unsubscribe from this group and stop receiving emails from it, send an email to clojure+unsubscr...@googlegroups.com. For more options, visit https://groups.google.com/d/optout.