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.
