Thanks!

The reason I proposed naked atoms is because I can see it becoming the main
mechanism to import functions, so I would go for the leaner format possible.

On Sat, Dec 26, 2020 at 9:34 AM Zach Daniel <[email protected]>
wrote:

> I could get behind that, although having to shuffle the specific arity
> imports to the end is a bit annoying. What about `import Enum, only: [at:
> :all, map: 2]`?
>
> On Sat, Dec 26, 2020 at 3:30 AM José Valim <[email protected]> wrote:
>
>> I believe this was proposed a long time ago but I rejected it because of
>> name conflicts. For example, imagine you import all of "foo" and on v1 it
>> means adding both foo/2 and foo/3. However, on v2 the module also defines a
>> foo/1. There is a chance this new arity will conflict with a local foo/1.
>>
>> On the other hand, I would say having a function with the same name and
>> different arity as an import is something that should be avoided in general
>> (either by using a different name or not importing it), so I think it is
>> worth this addition. The only complexity I foresee in implementing this is
>> skipping the warning if one of the arities is invoked - but that's an
>> implementation detail.
>>
>> Therefore, I propose we do support this feature. My suggestion is to
>> represent said names with naked atoms, such as:
>>
>> import Enum, only: [:at, :map]
>>
>> Specific arities go at the end as any keyword list:
>>
>> import Enum, only: [:at, map: 2]
>>
>> Thoughts?
>>
>> On Fri, Dec 25, 2020 at 11:52 PM [email protected] <
>> [email protected]> wrote:
>>
>>> >  e.g if you have a function with the same name but one less argument
>>>
>>> That can actually also be considered as a function with default values
>>> (and in the end, default values generate such functions with different
>>> arities). If not then I think it's a code smell and the function needs to
>>> be renamed.
>>>
>>> On Friday, December 25, 2020 at 11:43:03 PM UTC+1 [email protected]
>>> wrote:
>>>
>>>> Sorry, meant to say “in being able to say only import this *function*”,
>>>> not story :)
>>>>
>>>> On Fri, Dec 25, 2020 at 5:42 PM Zach Daniel <[email protected]>
>>>> wrote:
>>>>
>>>>> There are theoretical name conflicts from not being able to say “only
>>>>> import this story”  (e.g if you have a function with the same name but one
>>>>> less argument) what about import Mod, only: [func: 1..3]?
>>>>>
>>>>> On Fri, Dec 25, 2020 at 5:36 PM [email protected] <
>>>>> [email protected]> wrote:
>>>>>
>>>>>> Say function `foo` has multiple default values (two required args,
>>>>>> two with defaults). When importing, we must specify each arity that is 
>>>>>> used
>>>>>> in the calling code, e.g.
>>>>>>
>>>>>> ```
>>>>>> import Foo, only: [foo: 2, foo: 3, foo: 4]
>>>>>>
>>>>>> foo(1, 2)
>>>>>> foo(1, 2, 3)
>>>>>> foo(1, 2, 3, 4)
>>>>>> ```
>>>>>>
>>>>>> I expected that I could only import `foo/4`, and be able to call
>>>>>> `foo` with only two arguments and three arguments. Why? Because there is 
>>>>>> no
>>>>>> use case to force an imported function to be used only with a specific
>>>>>> arity. That would even be a code smell.
>>>>>>
>>>>>> Could we "generate" [foo: 2, foo: 3]` in addition to `[foo: 4]` to
>>>>>> support the call using its default values?
>>>>>>
>>>>>>
>>>>>> --
>>>>>> 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 [email protected].
>>>>>> To view this discussion on the web visit
>>>>>> https://groups.google.com/d/msgid/elixir-lang-core/28497895-3278-4de0-8423-99f9b9230597n%40googlegroups.com
>>>>>> <https://groups.google.com/d/msgid/elixir-lang-core/28497895-3278-4de0-8423-99f9b9230597n%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 [email protected].
>>> To view this discussion on the web visit
>>> https://groups.google.com/d/msgid/elixir-lang-core/38192124-1f41-407c-966e-82f223db3719n%40googlegroups.com
>>> <https://groups.google.com/d/msgid/elixir-lang-core/38192124-1f41-407c-966e-82f223db3719n%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 [email protected].
>> To view this discussion on the web visit
>> https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4JEwAOA2WYnbGAjgNtP3-d8kukc8_ieejX4mprAfBSHsg%40mail.gmail.com
>> <https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4JEwAOA2WYnbGAjgNtP3-d8kukc8_ieejX4mprAfBSHsg%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 [email protected].
> To view this discussion on the web visit
> https://groups.google.com/d/msgid/elixir-lang-core/CAK-yb0CAGVhJ1PPrTkHGgTZpvKj_dY%2BX39vXRmxcFVruk12haQ%40mail.gmail.com
> <https://groups.google.com/d/msgid/elixir-lang-core/CAK-yb0CAGVhJ1PPrTkHGgTZpvKj_dY%2BX39vXRmxcFVruk12haQ%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 [email protected].
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4JBOVQwg%2Bh_u2uy5CkJxY4GKfg4VCsRRU-OncEBAW0rqg%40mail.gmail.com.

Reply via email to