I don't think that creates a need for qualified defrecord "base keys" (the [x y z] in your example) though. Those keys are all from one origin: the piece of code with the defrecord itself in it. That piece is defining the data type and it stands to reason that it be privileged to specify unqualified keywords for use with that type.
If an instance of the record type ends up being "promiscuous", the keys introduced by third-party code will by definition not be (intended to be) the same as any of the base keys, and so will be optional keys (ordinary map keys rather than mandatory record fields). Those can still be namespace-qualified: testchamber.core=> (defrecord Foo [a b]) testchamber.core.Foo testchamber.core=> (Foo. 3 4) {:a 3, :b 4} testchamber.core=> (assoc (Foo. 3 4) ::bar 42) {:a 3, :b 4, :testchamber.core/bar 42} On Wed, Apr 10, 2013 at 3:38 PM, Simon Katz <nomisk...@gmail.com> wrote: > Yes. That concept of a promiscuous map (great name) is what I'm trying to > get at. > > > On Wednesday, 10 April 2013 20:30:52 UTC+1, Cedric Greevey wrote: > >> The main use for qualified keywords that occurs to me is if you have a >> "promiscuous map" that will be holding key/value pairs submitted by >> multiple pieces of code of distinct origins. A big registry of preferences >> that can be added to by plugins would be an example, with qualified >> keywords making it much less likely for two plugins to be made that are >> incompatible with each other because they keep overwriting each others' >> preferences. >> >> >> On Wed, Apr 10, 2013 at 9:13 AM, Jim foo.bar <jimpi...@gmail.com> wrote: >> >>> On 10/04/13 14:03, Simon Katz wrote: >>> >>>> Second, Clojure supports namespace-qualified keywords, presumably >>>> because it's possible that different libraries might want to use the same >>>> keyword for different purposes. >>>> >>> >>> I don't think that is the reason for having namespace-qualified >>> keywords...different libraries might want to use the same keyword for >>> different purposes and that is fine - no clashes (or at elast I've not >>> understood what you mean). >>> >>> It's my understanding that ::foo has (or should have) actual 'meaning' >>> in whatever namespace it exists whereas :foo doesn’t really have any >>> 'meaning'. >>> >>> I don't really think you want to access your record fields with a >>> namespace-qualified keyword, do you? How would that work exactly? what if >>> you got an instance of the record outside the namespace where the >>> namespace-qualified keyword is defined? It doesn't make sense to me at >>> all... >>> >>> Jim >>> >>> >>> -- >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "Clojure" group. >>> To post to this group, send email to clo...@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+u...@**googlegrou**ps.com >>> >>> For more options, visit this group at >>> http://groups.google.com/**group**/clojure?hl=en<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+u...@**googlegrou**ps.com. >>> >>> For more options, visit >>> https://groups.google.com/**grou**ps/opt_out<https://groups.google.com/groups/opt_out> >>> . >>> >>> >>> >> -- > -- > 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/groups/opt_out. > > > -- -- 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/groups/opt_out.