I understand that, but the issue that bothers me is that MapEntry prints like a vector and satisfies the clojure.core/vector? predicate. If you call first or seq or something like that on a map, your REPL will lie to you. Worse, you might even be 100% aware that you have a MapEntry instead of a vector only to have a distant part of your program blow up on you at a much later date for some seemingly innocuous change. You've then got to trace your program backwards and wrap some expression in (vec ...).
On Saturday, July 19, 2014 9:35:55 PM UTC-4, Alex Baranosky wrote: > > You cannot have an empty MapEntry though, because map entries always have > just one size, a key and a value. I can definitely see how it can be > confusing though. > > > On Sat, Jul 19, 2014 at 4:42 PM, Brandon Bloom <brandon...@gmail.com > <javascript:>> wrote: > >> I've been bitten by all three of these things in the past: >> >> 1) A MapEntry looks like a vector, but isn't. >> 2) Two element vectors can't be used as map entries. >> 3) Applying empty to a MapEntry returns nil. >> >> On Saturday, July 19, 2014 4:04:13 PM UTC-4, Jozef Wagner wrote: >>> >>> While the c.l.MapEntry is a persistent vector, there is no such thing as >>> an empty MapEntry persistent vector. Returning empty HAMT persistent vector >>> instead is not a good solution, as 2 elements HAMT vector does not >>> implement IMapEntry interface. >>> >>> One approach on how to solve this is in Zach's clj-tuple [1] where every >>> 2-tuple automatically implements IMapEntry interface. >>> >>> [1] https://github.com/ztellman/clj-tuple >>> >>> Jozef >>> >>> On Saturday, July 19, 2014 9:49:21 PM UTC+2, puzzler wrote: >>>> >>>> As Mike points out, it does seem that MapEntry is considered a >>>> collection and is designed to emulate a vector so that you don't really >>>> have to worry about whether you have a MapEntry or a two-element vector >>>> (and as he points out, in ClojureScript there really is no distinction >>>> between a MapEntry and a vector). >>>> >>>> With that in mind, I would agree that MapEntry's lack of implementation >>>> for empty is most likely an oversight, and ideally should behave as if it >>>> were a vector. >>>> >>>> >>>> >>>> >>>> On Sat, Jul 19, 2014 at 11:46 AM, Mike Fikes <mike...@me.com> wrote: >>>> >>>>> MapEntry is a collection: >>>>> >>>>> (coll? (clojure.lang.MapEntry. "a" 1)) >>>>> >>>>> ;=> true >>>>> >>>>> >>>>> (ancestors (class (clojure.lang.MapEntry. "a" 1))) >>>>> >>>>> ;=> (a set that includes clojure.lang.IPersistentCollection) >>>>> >>>>> >>>>> The docstring for empty implies it would return an empty MapEntry. But >>>>> perhaps since MapEntry is a special collection type that must have a size >>>>> exactly equal to 2, empty must return nil. >>>>> >>>>> >>>>> Perhaps ClojureScript will one day introduce a MapEntry type and >>>>> behave the same way as Clojure (ClojureScript currently returns a >>>>> PersistentVector). >>>>> >>>>> -- >>>>> 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...@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+u...@googlegroups.com. >>>>> For more options, visit https://groups.google.com/d/optout. >>>>> >>>> >>>> -- >> 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 >> <javascript:> >> 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...@googlegroups.com <javascript:> >> 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+u...@googlegroups.com <javascript:>. >> For more options, visit https://groups.google.com/d/optout. >> > > -- 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.