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.

Reply via email to