Yes, I agree with all of that I think. For nested navigation, consider that (get-in data [:year :month) is equivalent to (get data :month (get data :year)) so you could nav one step at a time. Calling nav (& then datafy) on the intermediate steps would just bring you back to the data world at the same point as the inner (top-level) get in that case.
nav-in would be a strange operation since it would need to call datafy after each step to get the arguments needed for the next nav call. REBL provides nav-> which does this behind the scenes while it is threading data through the pipeline of nav operations (so there is a precedent). Even with an equivalent to nav-in (or nav->) I think that using datafy/nav on Java Time objects may be an incomplete mapping -- and probably somewhat hard to work with. When you first posted, I was more focused on the confusion using non-core datafy/nav would be and interop with REBL -- I didn't look too deep into the _actual_ navigation you were proposing, sorry. On Sun, Feb 9, 2020 at 1:19 AM dimitris <jimpil1...@gmail.com> wrote: > Hi Sean, > > I'm back home and trying to understand/internalize this...Unfortunately, > this kind of (flat & arg-less) navigation is not going to be very useful > for the majority of java.time (datafied) objects. That is for two > reasons... First of all the datafied maps I'm returning are nested. This > means that for example to get to the `YearMonth` object, you would need to > navigate to the [:year :month] path, and in the absence of `nav-in` this is > somewhat awkward. Secondly, most of the interesting/useful conversions (in > the context of date-times), almost always requires some sort of argument > (e.g. `Instant` to `LocalDateTime`), and so if the last arg to `nav` has to > be either nil (for missing keys), or match the actual value in the map, > then there is no room left for arguments. > > It is true that I'm probably trying to do too much with `nav`, but now > that I'm understanding its purpose better, I get the feeling that it's not > going to be as useful as I originally thought (in the context of this lib). > Yes, I can pull all the clever stuff into distinct functions, but > ultimately for `nav` to be useful I would have to either: > > 1. Change the datafied representation to something flat, OR > > 2. accept that navigating to pure data (via `get-in`) will be done with > real paths (e.g. `[:year :month]`), whereas navigating to objects (via > `nav`) will be done with bogus keys (e.g. `:month-of-year`). > > As things stand (with my current nested representation), only LocalDate, > LocalDateTime, OffsetDateTime & ZonedDateTime can have useful navigations: > > - LocalDate => :week-day , :year-month > > - LocalDateTime => :local-date, :local-time > > - OffsetDateTime => :local-datetime, :instant > > - ZonedDateTime => :offset-datetime, :local-datetime, :instant > > That is pretty much it in terms of `nav`... > > Does that make (more) sense? > > > Many thanks in advance... > > Dimitris > > ps: Sean I can be on slack but with my work email > > > On 04/02/2020 05:18, Sean Corfield wrote: > > You're misunderstanding me. I'll try again. > > I'm not saying you can't navigate to keys that don't exist in the data -- > but since there would be no corresponding value, the nav call would be (nav > coll k nil) essentially. > > If (get coll k) produces some value v, then (nav coll k v) will take you > from the right side (pure data) to the left side (objects) to the object > that "corresponds" to the equivalent navigation on the right (i.e., within > the data). > > object -> datafy -> pure data > pure data -> get etc -> new pure data > pure data -> nav -> new object "corresponding" to new pure data > > On Mon, Feb 3, 2020 at 3:38 AM Dimitrios Jim Piliouras < > jimpil1...@gmail.com> wrote: > >> This is what I've done but it contradicts what we said earlier... >> >> If I navigate to some existing key and it gives me back a Java object, >> then it means that the datafied representation had a key pointing to non >> data! >> >> I have read your blog post multiple times ;), but I think the situation >> you're describing with the foreign keys is rather unique... >> >> The datafied datetime cannot possibly include all its possible formats, >> nor all the possible alternatives - that would be extremely wasteful and >> meaningless the way I see it. >> >> >> Let's take an Instant as an example...it datafies to map of two keys >> (:epoch, :second). Does it make sense to add a :format-iso key in there >> pointing to a String? Is there any point navigating to that key? Is there >> any point navigating to :epoch or :second? The answer is no, right? Is >> there a point in navigating to :zoned-datetime given a zone id? I would >> think yes... >> >> On Mon, 3 Feb 2020, 04:47 Sean Corfield, <s...@corfield.org> wrote: >> >>> Think of it as a square: >>> >>> You start with an object of some sort (left side) -> datafy -> turns it >>> into pure Clojure data (including metadata). (right side) >>> >>> Given pure Clojure data, you can navigate through it with get etc and >>> you stay in the right side (pure data). >>> >>> Given that pure Clojure data, you can navigate back to the left hand >>> wide with nav, mimicking how get etc work. >>> >>> So datafy is L -> R, get is R -> R, nav is R -> L on a "diagonal" that >>> takes you back to the object world on the left, corresponding to the place >>> on the right that you'd get to via get etc. >>> >>> See if this blog post helps >>> https://corfield.org/blog/2018/12/03/datafy-nav/ >>> >>> >>> On Sun, Feb 2, 2020 at 1:22 AM Dimitrios Jim Piliouras < >>> jimpil1...@gmail.com> wrote: >>> >>>> Hi Sean, >>>> >>>> >>>> >>>> Admittedly, I’ve never used REBL, and I did struggle with the shape and >>>> name of the `nav` arguments... >>>> >>>> >>>> >>>> In particular I’m struggling to understand why would anyone use `nav` >>>> to navigate to a key that already exists in the map...Can’t we just use >>>> `get` or `get-in`? >>>> >>>> You used the :format as an example, which works with nil, :iso, or a >>>> String pattern as the last arg to nav. But again, :format is NOT in the >>>> datafied representation. >>>> >>>> >>>> >>>> In essence, I’ve tried to use `nav` to navigate to things that can be >>>> expensive and don’t necessarily belong in the actual datafied >>>> representation. >>>> >>>> If the second argument to `nav`, is expected to be a key already >>>> present in the map, then I really don’t understand what is the point of >>>> `nav`. >>>> >>>> >>>> >>>> kind regards, >>>> >>>> Dimitris >>>> >>>> >>>> >>>> >>>> >>>> *From: *Sean Corfield <s...@corfield.org> >>>> *Sent: *02 February 2020 07:36 >>>> *To: *Clojure Mailing List <clojure@googlegroups.com> >>>> *Subject: *Re: ANN: jedi-time 0.1.4 >>>> >>>> >>>> >>>> This is very cool but I would strongly recommend you try using this >>>> with REBL so you can figure out how to make the `nav` part work in a more >>>> natural way. >>>> >>>> >>>> >>>> nav is intended to work with a key and value (from the datafied >>>> structure), but your nav expects special values so it doesn't work with >>>> REBL. >>>> >>>> >>>> >>>> You can put (java.time.Instant/now) into REBL and your datafication >>>> produces a great data representation, but you can't navigate into it using >>>> the keys (and values) of the data structure itself. You can put :format >>>> into the nav-> bar and it defaults to a format you can get a string back, >>>> but none of the other nav calls will work. >>>> >>>> >>>> >>>> You might consider combining the :format key with the actual format, >>>> e.g., :format-iso, :format-yy-MM-dd and if the key is something your don't >>>> recognize, just let it behave like regular data navigation. >>>> >>>> >>>> >>>> I think you're trying to do too much with nav, beyond "navigation". I >>>> think you could split some of the "clever" navigation out into a transform >>>> function that takes a datafied time and produces a new datafied time, and >>>> then let nav do the "conversion" back to Java objects. You've complected >>>> the transforms and the conversion right now. >>>> >>>> >>>> >>>> If you're on Slack, I'm happy to DM about this in more detail (when >>>> you're back from traveling). >>>> >>>> >>>> >>>> Sean >>>> >>>> >>>> >>>> On Sat, Feb 1, 2020 at 6:02 AM dimitris <jimpil1...@gmail.com> wrote: >>>> >>>> Hi folks, >>>> >>>> The first public release of `jedi-time` should be hitting clojars any >>>> minute now. I am traveling next week so may be slow to reply to >>>> feedback/bugs/PRs... >>>> >>>> https://github.com/jimpil/jedi-time >>>> >>>> >>>> Kind regards, >>>> >>>> Dimitris >>>> >>>> -- >>>> 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. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/clojure/8dbb9c5b-0ab0-fc76-6dc6-5e75b93d452a%40gmail.com >>>> . >>>> >>>> >>>> >>>> >>>> -- >>>> >>>> Sean A Corfield -- (904) 302-SEAN >>>> An Architect's View -- http://corfield.org/ >>>> World Singles Networks, LLC. -- https://worldsinglesnetworks.com/ >>>> >>>> "Perfection is the enemy of the good." >>>> -- Gustave Flaubert, French realist novelist (1821-1880) >>>> >>>> -- >>>> 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. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/clojure/CAD4thx-dwJkYYsGDWnD%3DAc7oaNBHqykGPzYhTHdWQRJmbk1DEw%40mail.gmail.com >>>> <https://groups.google.com/d/msgid/clojure/CAD4thx-dwJkYYsGDWnD%3DAc7oaNBHqykGPzYhTHdWQRJmbk1DEw%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>>> >>>> -- >>>> 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. >>>> To view this discussion on the web visit >>>> https://groups.google.com/d/msgid/clojure/5e3694b9.1c69fb81.8a875.d5ea%40mx.google.com >>>> <https://groups.google.com/d/msgid/clojure/5e3694b9.1c69fb81.8a875.d5ea%40mx.google.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> >>> >>> -- >>> Sean A Corfield -- (904) 302-SEAN >>> An Architect's View -- http://corfield.org/ >>> World Singles Networks, LLC. -- https://worldsinglesnetworks.com/ >>> >>> "Perfection is the enemy of the good." >>> -- Gustave Flaubert, French realist novelist (1821-1880) >>> -- >>> 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. >>> To view this discussion on the web visit >>> https://groups.google.com/d/msgid/clojure/CAD4thx8GRuxeGd-MrMSti%2BWRV1neRFOLWNh08xpb-Qrmya0kZw%40mail.gmail.com >>> <https://groups.google.com/d/msgid/clojure/CAD4thx8GRuxeGd-MrMSti%2BWRV1neRFOLWNh08xpb-Qrmya0kZw%40mail.gmail.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- >> 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. >> To view this discussion on the web visit >> https://groups.google.com/d/msgid/clojure/CAE3KzwJ9QuTB7gOMdyja5LyczStJzgsEv9c%3D3_cM%2BoY2_ppPRA%40mail.gmail.com >> <https://groups.google.com/d/msgid/clojure/CAE3KzwJ9QuTB7gOMdyja5LyczStJzgsEv9c%3D3_cM%2BoY2_ppPRA%40mail.gmail.com?utm_medium=email&utm_source=footer> >> . >> > > > -- > Sean A Corfield -- (904) 302-SEAN > An Architect's View -- http://corfield.org/ > World Singles Networks, LLC. -- https://worldsinglesnetworks.com/ > > "Perfection is the enemy of the good." > -- Gustave Flaubert, French realist novelist (1821-1880) > -- > 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. > To view this discussion on the web visit > https://groups.google.com/d/msgid/clojure/CAD4thx_1%2BwQi6_-BkiPLM%3DUvAm84wWF3Ob_%2B%3DZ2nZx-9uHj2fQ%40mail.gmail.com > <https://groups.google.com/d/msgid/clojure/CAD4thx_1%2BwQi6_-BkiPLM%3DUvAm84wWF3Ob_%2B%3DZ2nZx-9uHj2fQ%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > > -- > 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. > To view this discussion on the web visit > https://groups.google.com/d/msgid/clojure/470f811f-21cb-74f4-bd85-4a3fb5792fef%40gmail.com > <https://groups.google.com/d/msgid/clojure/470f811f-21cb-74f4-bd85-4a3fb5792fef%40gmail.com?utm_medium=email&utm_source=footer> > . > -- Sean A Corfield -- (904) 302-SEAN An Architect's View -- http://corfield.org/ World Singles Networks, LLC. -- https://worldsinglesnetworks.com/ "Perfection is the enemy of the good." -- Gustave Flaubert, French realist novelist (1821-1880) -- 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. To view this discussion on the web visit https://groups.google.com/d/msgid/clojure/CAD4thx_w554izXzEXznMmT9ac6-1iv9b9tKLdU-yJz1BO4NA%3Dg%40mail.gmail.com.