Filtering nils may be considered bad practice (i.e. why do you have nils
there?) so I think it should be done explicitly. And it may be more
readable to do with Enum.reject(&is_nil/1).

Enum.group_by with identity by default has no purpose. You are only going
to group the elements themselves. At best it is a count of the elements in
the list, but not an efficient one at that.

Personally, the only time I recall needing &identity/1 is in Agent.get/2,
but even there we want to force you to say what you want, to avoid
unecessary data copy.


*José Valim*
www.plataformatec.com.br
Skype: jv.ptec
Founder and Director of R&D


On Fri, Jul 12, 2019 at 10:28 PM Bruce Tate <br...@grox.io> wrote:

> :) all good.
>
> I do think that both & &1 and fn x -> x end  and & &1 are both harder to
> scan  than &identity/1 as it's almost always better to name a concept for a
> beginner (or most anyone, for that matter). In my classes we often write an
> identity function as an intermediate teaching step because I can name the
> concept. There's less to grok at once.
>
> But no big deal... if we're closing this I will respect your decision.
>
> José, what would you say to have the identity function as a default to
> things like Enum.filter and Enum.group_by? Some of the other Enumerable
> functions have defaults, such as sort. There's no breaking change and it
> obviates the need for the identity function in quite a few places.
>
> Examples: a word counter, where the words might be nil:
>
> words
> |> Enum.filter
> |> Enum.group_by
> |> Map.new(fn {x, y} -> {x, length(y)} end)
>
> Solves the problem of identity for some of the important use cases; no
> breaks of backward compatibility; discoverable through existing docs.
> -bt
>
>
> On Fri, Jul 12, 2019 at 1:21 PM José Valim <
> jose.va...@plataformatec.com.br> wrote:
>
>> If the goal is teaching, then I think "fn x -> x end" beats both
>> "&identify/1" and "& &1" in terms of clarity, as identity itself is still a
>> concept that needs to be explained.
>>
>>
>> *José Valim*
>> www.plataformatec.com.br
>> Skype: jv.ptec
>> Founder and Director of R&D
>>
>>
>> On Fri, Jul 12, 2019 at 7:18 PM Bruce Tate <br...@grox.io> wrote:
>>
>>> > Why should we add this to Elixir core, instead of "extending" with
>>> module?
>>>
>>> I have been a big proponent of this for a long time because just about
>>> every code base uses the identity function and it's a barrier to those who
>>> would learn Elixir.
>>>
>>> Rather than import or call &FP.identity/1, most would just continue to
>>> use something like & &1, and that's generally tough on beginners.
>>>
>>> -bt
>>>
>>> On Fri, Jul 12, 2019 at 12:59 PM Chulki Lee <chulki....@gmail.com>
>>> wrote:
>>>
>>>> I'm happy to see Elixir adopting FP concept here ([identity function](
>>>> https://en.wikipedia.org/wiki/Identity_function)), but I'm not sure
>>>> it's good to add it to `Kernel` (as it's imported by default!) - or even in
>>>> Elixir core.
>>>>
>>>> Why should we add this to Elixir core, instead of "extending" with
>>>> module?
>>>>
>>>> ```elixir
>>>> defmodule FP do
>>>>   def identity(a), do: a
>>>> end
>>>>
>>>> def module YourApp do
>>>>   import FP
>>>>
>>>>   def hello do
>>>>     'abcdaabccc' |> Enum.sort |> Enum.chunk_by(&identity/1)
>>>>   end
>>>> end
>>>> ```
>>>>
>>>> For example, that library can be de-facto helper for such FP utility
>>>> functions.
>>>>
>>>> --
>>>> 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/2e98526b-e83c-4b92-8035-26bce95da822%40googlegroups.com
>>>> <https://groups.google.com/d/msgid/elixir-lang-core/2e98526b-e83c-4b92-8035-26bce95da822%40googlegroups.com?utm_medium=email&utm_source=footer>
>>>> .
>>>> For more options, visit https://groups.google.com/d/optout.
>>>>
>>>
>>>
>>> --
>>>
>>> Regards,
>>> Bruce Tate
>>> CEO
>>>
>>>
>>> <https://bowtie.mailbutler.io/tracking/hit/f8218219-d2a8-4de4-9fef-1cdde6e723f6/c7c97460-016e-45fb-a4ab-0a70318c7b97>
>>>
>>> Groxio, LLC.
>>> 512.799.9366
>>> br...@grox.io
>>> grox.io
>>>
>>> --
>>> 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/CAFXvW-5vOv15iAWWH6qvbyUPf7KrY2Smw0oBKdf56%3DLPiH9BNA%40mail.gmail.com
>>> <https://groups.google.com/d/msgid/elixir-lang-core/CAFXvW-5vOv15iAWWH6qvbyUPf7KrY2Smw0oBKdf56%3DLPiH9BNA%40mail.gmail.com?utm_medium=email&utm_source=footer>
>>> .
>>> For more options, visit https://groups.google.com/d/optout.
>>>
>> --
>> 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/CAGnRm4LX2L155aA6koxFGFmKdBoNoaRYmX83BQMFBnQRw-fLhA%40mail.gmail.com
>> <https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4LX2L155aA6koxFGFmKdBoNoaRYmX83BQMFBnQRw-fLhA%40mail.gmail.com?utm_medium=email&utm_source=footer>
>> .
>> For more options, visit https://groups.google.com/d/optout.
>>
>
>
> --
>
> Regards,
> Bruce Tate
> CEO
>
>
> <https://bowtie.mailbutler.io/tracking/hit/f8218219-d2a8-4de4-9fef-1cdde6e723f6/c7c97460-016e-45fb-a4ab-0a70318c7b97>
>
> Groxio, LLC.
> 512.799.9366
> br...@grox.io
> grox.io
>
> --
> 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/CAFXvW-6xhMw0UbpO7hL0Lm7bOp1Q%3D2EG6axNcH530BDN_U6i5A%40mail.gmail.com
> <https://groups.google.com/d/msgid/elixir-lang-core/CAFXvW-6xhMw0UbpO7hL0Lm7bOp1Q%3D2EG6axNcH530BDN_U6i5A%40mail.gmail.com?utm_medium=email&utm_source=footer>
> .
> For more options, visit https://groups.google.com/d/optout.
>

-- 
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%2BPjFCqiPKEdSXuUc%3DM4R_Xv5nXEXJ75O6XzUHPkgWA8A%40mail.gmail.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to