>  Anyway, to move the discussion forward, can someone do a more complete 
survey on what this function are called in many of the other languages? I 
just want to make sure we do our due diligence before adding it to the 
language.

Haskell: id 
<https://hackage.haskell.org/package/base-4.12.0.0/docs/Prelude.html#v:id>
C++: std::identity 
<https://en.cppreference.com/w/cpp/utility/functional/identity>
Rust: std::convert::identity 
<https://doc.rust-lang.org/nightly/std/convert/fn.identity.html>
Clojure: identity <https://clojuredocs.org/clojure.core/identity>
Ruby: Object#itself 
<https://ruby-doc.org/core-2.6.3/Object.html#method-i-itself> (although 
this is a bound method that returns the *receiver* rather than an unbound 
function taking one parameter that returns it unchanged. It is the closest 
thing we have built-in in Ruby <https://bugs.ruby-lang.org/issues/6373>, 
however)
Racket (and some other Lisps): identity 
<https://docs.racket-lang.org/reference/procedures.html?q=identity#%28def._%28%28lib._racket%2Ffunction..rkt%29._identity%29%29>
Python: no built-in named identity function.
JS: no built-in named identity function.
PHP: no built-in named identity function.
Kotlin: no built-in named identity function.



On Tuesday, July 2, 2019 at 8:40:45 PM UTC+2, José Valim wrote:
>
> Thanks Chris, it is important that someone being counter arguments, even 
> if they can be disproved. :)
>
> I definitely see how such a small function can be useful but, at the same 
> time, I am not convinced about the name "identity".
>
> I found it curious that Clojure actually have an identity function because 
> the definition of Identity they use when talking about values and change is 
> a more complex one (and one that really stuck with me):
>
> *> By identity I mean a stable logical entity associated with a series of 
> different values over time*
>
> https://clojure.org/about/state#_working_models_and_identity
>
> Of course, my interpretation above is likely uncommon and there are other 
> interpretations of identity that would fit nicely.
>
> Anyway, to move the discussion forward, can someone do a more complete 
> survey on what this function are called in many of the other languages? I 
> just want to make sure we do our due diligence before adding it to the 
> language.
>
> Thank you,
>
> *José Valim*
> www.plataformatec.com.br
> Skype: jv.ptec
> Founder and Director of R&D
>
>
> On Tue, Jul 2, 2019 at 8:25 PM Christopher Keele <christ...@gmail.com 
> <javascript:>> wrote:
>
>> Derp, I knew that. Good point.
>>
>> On Tue, Jul 2, 2019 at 9:55 AM Michał Muskała <mic...@muskala.eu 
>> <javascript:>> wrote:
>>
>>> Because Elixir is a lisp-2 language, variables and functions are in 
>>> different "namespaces". This means you can have local variables with names 
>>> of local functions without any issues, but it also means you need different 
>>> syntax when you want to call a function contained in a variable. Or 
>>> formulated differently - variables can't shadow functions. For example, 
>>> consider: 
>>>
>>> bar = &foo/0
>>> bar.() #=> 1
>>> bar() #=> 2
>>> def foo(), do: 1def bar(), do: 2
>>>
>>> Having a Kernel.id/1 function would not preclude you from using variables 
>>> called id.
>>>
>>>
>>> Michał.
>>> On 2 Jul 2019, 18:41 +0200, Christopher Keele <christ...@gmail.com 
>>> <javascript:>>, wrote:
>>>
>>> I'd cast my vote against this. The proposal seems to be: 
>>>
>>> 1. Create a function named 'id' or some such
>>> 2. Put it in the Kernel namespace (so it need not be prefixed)
>>>
>>> I've been doing a lot of python lately and they have a lot of things 
>>> like this, including the same 'filter' global function mentioned in this 
>>> thread.
>>>
>>> Points against:
>>>
>>> 1. It'd suck to not be able to use 'id' as a variable name, and would 
>>> conflict with a lot of existing code.
>>> 2. Alternative names to 'id' or namespacing it are not shorter than 
>>> '&(&1)'
>>> 3. '&(&1)' is more open to change with requirements
>>> 4. Adopting 'id' within Kernel would encourage adding more utility 
>>> functions to it, exacerbating 1, like the proposed 'filter' function
>>> 5. Not adopting it within the Kernel would be hard, as there's no real 
>>> appropriate place for it elsewhere in standard lib, unlike Enum's 'filter'
>>>
>>> Generally it's a nice idea, but I can't think of a great way to make it 
>>> work, and it'd open the floodgates to more utility functions that I've come 
>>> to find grating in day-to-day python development.
>>>
>>> Just my two cents,
>>> Chris K
>>>
>>> --
>>> 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-l...@googlegroups.com <javascript:>.
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/elixir-lang-core/fffd5b76-4385-40de-93bd-148f1b94bb27%40googlegroups.com
>>>  
>>> <https://groups.google.com/d/msgid/elixir-lang-core/fffd5b76-4385-40de-93bd-148f1b94bb27%40googlegroups.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 a topic in the 
>>> Google Groups "elixir-lang-core" group.
>>> To unsubscribe from this topic, visit 
>>> https://groups.google.com/d/topic/elixir-lang-core/tB61BHYIH1s/unsubscribe
>>> .
>>> To unsubscribe from this group and all its topics, send an email to 
>>> elixir-l...@googlegroups.com <javascript:>.
>>> To view this discussion on the web visit 
>>> https://groups.google.com/d/msgid/elixir-lang-core/b2149582-b8ba-4759-99ac-a634f73f3243%40Spark
>>>  
>>> <https://groups.google.com/d/msgid/elixir-lang-core/b2149582-b8ba-4759-99ac-a634f73f3243%40Spark?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-l...@googlegroups.com <javascript:>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/elixir-lang-core/CAD9kT2R41gmZXU9_YAqAdyJQDP-M37j-mgUet-okoeBzF%3DdMDA%40mail.gmail.com
>>  
>> <https://groups.google.com/d/msgid/elixir-lang-core/CAD9kT2R41gmZXU9_YAqAdyJQDP-M37j-mgUet-okoeBzF%3DdMDA%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/458469ec-ac00-4155-b8f0-717e6623f820%40googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to