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
<mailto: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 <mailto: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 <mailto: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
<mailto: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 <mailto:s...@corfield.org>
*Sent: *02 February 2020 07:36
*To: *Clojure Mailing List
<mailto: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
<mailto: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
<mailto: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
<mailto:clojure%2bunsubscr...@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
<mailto:clojure%2bunsubscr...@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
<mailto: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
<mailto:clojure%2bunsubscr...@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
<mailto: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
<mailto: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
<mailto:clojure%2bunsubscr...@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
<mailto: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
<mailto: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
<mailto:clojure%2bunsubscr...@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
<mailto: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 <mailto: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
<mailto:clojure%2bunsubscr...@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
<mailto: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 <mailto: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
<mailto: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
<mailto: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
<mailto: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
<mailto:clojure%2bunsubscr...@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
<mailto: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
<mailto: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
<mailto: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
<mailto: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
<https://groups.google.com/d/msgid/clojure/CAD4thx_w554izXzEXznMmT9ac6-1iv9b9tKLdU-yJz1BO4NA%3Dg%40mail.gmail.com?utm_medium=email&utm_source=footer>.