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 thojan...@gmail.com <thojansse...@gmail.com>
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 zachary....@gmail.com
> 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 <zachary....@gmail.com>
>> 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 thojan...@gmail.com <thojan...@gmail.com>
>>> 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 elixir-lang-co...@googlegroups.com.
>>>> 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 elixir-lang-core+unsubscr...@googlegroups.com.
> 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 elixir-lang-core+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4JEwAOA2WYnbGAjgNtP3-d8kukc8_ieejX4mprAfBSHsg%40mail.gmail.com.

Reply via email to