That's a good question. To me, Access is mostly the backend that is used
for the brackets plus get_in/update_in/pop_in. It is not primarily meant to
be invoked directly, unless you truly need to write a lazy fetch that works
against keywords and maps. Which do not sound very common in practice.

I also think the keywords vs maps vs structs is a common confusion point
and I am curious to see if the type system will give us more affordances
around those cases and better guidelines.

On Thu, Aug 8, 2024 at 5:08 PM Tobias Pfeiffer <prag...@gmail.com> wrote:

> You're correct, my thing with all of this is just that we already have
> these functions when working with the specific data types. To me it makes
> sense to have the same function available when using the module that
> (mostly) wraps these. The added benefit isn't just readability imo, but
> also familiarity with the function and that it'd then also work with other
> types that implement Access, as [] doesn't work on structs.
>
> On Thu, Aug 1, 2024 at 12:00 PM Jay Rogov <rogovyaros...@gmail.com> wrote:
>
>> I think it can pretty much be substituted with `data[key] ||
>> expensive_fun()`, can it not? (apart from the case when key actually points
>> to `nil` value)
>>
>> The only benefit of this added function I see is improved readability
>> when piping, but it's still possible to do without it:
>> ```
>> iex(1)> data = %{a: 3}
>> %{a: 3}
>> iex(2)> data[:a]
>> 3
>> iex(3)> |> Kernel.||(:rand.uniform)
>> 3
>> iex(4)> data[:b]
>> nil
>> iex(5)> |> Kernel.||(:rand.uniform)
>> 0.764306455162276
>> ```
>>
>> On Wednesday 31 July 2024 at 8:28:04 pm UTC+2 José Valim wrote:
>>
>>> I see. It seems to be a narrow use case for now, so I think
>>> Access.fetch/2 is the way to go until we get more evidence that many folks
>>> need something similar. My impression is that the direct Access functions
>>> are not that commonly used in general. :)
>>>
>>> On Wed, Jul 31, 2024 at 8:23 PM Tobias Pfeiffer <pra...@gmail.com>
>>> wrote:
>>>
>>>> Heyo José,
>>>>
>>>> in most cases it's just a helper method with optional args - which I
>>>> like to keep in a way that users of it can user either a map or keyword
>>>> args.
>>>>
>>>> In this particular case it was this helper for tests:
>>>>
>>>> @supply_tag 744_306
>>>> def my_helper(opts \\ []) do
>>>> query_string = Keyword.get_lazy(opts, :query_string, &
>>>> build_query_string/0)
>>>> supply_tag = Access.get(opts, :supply_tag, @supply_tag)
>>>> ip = Access.get(opts, :ip, "68.235.110.20")
>>>>
>>>> "https://some.url#{supply_tag}#{query_string}&ip=#{ip}";
>>>> end
>>>>
>>>> build_query_string/0 takes some time but not a lot - but it could also
>>>> take more time aka the classical get_lazy/3 use case.
>>>>
>>>> Using Keyword.get_lazy/3 here works but limits callers to use keywords
>>>> (or do a Map to Keyword conversion) which limits the usefulness of `Access`
>>>> to me - as I tend to prefer to use it when both maps and keyword lists seem
>>>> acceptable.
>>>>
>>>> Cheers + thanks,
>>>> Tobi
>>>> On Wed, Jul 31, 2024 at 8:39 AM José Valim <jose....@dashbit.co> wrote:
>>>>
>>>>> Hi Tobi, can you provide some context of how it would be used, code
>>>>> wise? Which problem are you facing?
>>>>>
>>>>> On Wed, Jul 31, 2024 at 08:10 Tobias Pfeiffer <pra...@gmail.com>
>>>>> wrote:
>>>>>
>>>>>> Hello beloved core team,
>>>>>>
>>>>>> TLDR; Should we have Access.get_lazy/3 ?
>>>>>>
>>>>>> As usual I'm sure there is some reason why this doesn't exist yet but
>>>>>> I don't know so here is the question/proposal:
>>>>>>
>>>>>> We have Map.get_lazy/3 and Keyword.get_lazy/3 - they're amazing and
>>>>>> helpful. Access basically encapsulates the 2 and I generally use it 
>>>>>> where I
>>>>>> can to allow both Keywords and Maps - most commonly when I deal with
>>>>>> options. It doesn't have get_lazy/3 though, which sometimes makes me fall
>>>>>> back to either Map or Keyword (or wrap it myself).
>>>>>>
>>>>>> Using Access.fetch/2 it should also be easy to implement.
>>>>>>
>>>>>> So, would a PR implementing Access.get_lazy/3 be considered?
>>>>>>
>>>>>> Thanks!
>>>>>> Tobi
>>>>>>
>>>>>> --
>>>>>> You received this message because you are subscribed to the Google
>>>>>> Groups "elixir-lang-core" group.
>>>>>> To unsubscribe from this group and stop receiving emails from it,
>>>>>> send an email to elixir-lang-co...@googlegroups.com.
>>>>>> To view this discussion on the web visit
>>>>>> https://groups.google.com/d/msgid/elixir-lang-core/CAG3Z5YQYuv8SF81vs8UNhtpGN3wA0NHgH1yFhixuwoQmV2S8eQ%40mail.gmail.com
>>>>>> <https://groups.google.com/d/msgid/elixir-lang-core/CAG3Z5YQYuv8SF81vs8UNhtpGN3wA0NHgH1yFhixuwoQmV2S8eQ%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>>> .
>>>>>>
>>>>> --
>>>>> You received this message because you are subscribed to the Google
>>>>> Groups "elixir-lang-core" group.
>>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>>> an email to elixir-lang-co...@googlegroups.com.
>>>>> To view this discussion on the web visit
>>>>> https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4L6popY-tMX54mKh3kc_cbmYRa7G7G0Em64ZPUoZEX6Lw%40mail.gmail.com
>>>>> <https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4L6popY-tMX54mKh3kc_cbmYRa7G7G0Em64ZPUoZEX6Lw%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>>> .
>>>>>
>>>> --
>>>> You received this message because you are subscribed to the Google
>>>> Groups "elixir-lang-core" group.
>>>> To unsubscribe from this group and stop receiving emails from it, send
>>>> an email to elixir-lang-co...@googlegroups.com.
>>>>
>>> To view this discussion on the web visit
>>>> https://groups.google.com/d/msgid/elixir-lang-core/CAG3Z5YTOA%2Buditq5jfHETFNanUwT_fXsnjt-S%2BnekqCJcp_20A%40mail.gmail.com
>>>> <https://groups.google.com/d/msgid/elixir-lang-core/CAG3Z5YTOA%2Buditq5jfHETFNanUwT_fXsnjt-S%2BnekqCJcp_20A%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>>> .
>>>>
>>> --
>> You received this message because you are subscribed to the Google Groups
>> "elixir-lang-core" group.
>> To unsubscribe from this group and stop receiving emails from it, send an
>> email to elixir-lang-core+unsubscr...@googlegroups.com.
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/elixir-lang-core/813bfaf3-059f-4890-b82e-2af35c7720f4n%40googlegroups.com
>> <https://groups.google.com/d/msgid/elixir-lang-core/813bfaf3-059f-4890-b82e-2af35c7720f4n%40googlegroups.com?utm_medium=email&utm_source=footer>
>> .
>>
> --
> You received this message because you are subscribed to the Google Groups
> "elixir-lang-core" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to elixir-lang-core+unsubscr...@googlegroups.com.
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/elixir-lang-core/CAG3Z5YTTCO0n7OyvEQU-OS9KVAat%3DnNpysJm0y7sxLAwm6-Z3w%40mail.gmail.com
> <https://groups.google.com/d/msgid/elixir-lang-core/CAG3Z5YTTCO0n7OyvEQU-OS9KVAat%3DnNpysJm0y7sxLAwm6-Z3w%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
>

-- 
You received this message because you are subscribed to the Google Groups 
"elixir-lang-core" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to elixir-lang-core+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4%2BdjRby4HwoFQ-F16g_rO%3DqVowtYJJQK8p8nLF3dMCzBQ%40mail.gmail.com.

Reply via email to