Thank you for the proposal. Some would already say the capture syntax is already too concise (and they would always prefer fn instead), and the proposal would introduce ambiguity to them, given that &2 would have different meanings depending on where it is located. One of the big rules in Elixir is that, when we give syntax affordances, such as the capture operator, we keep its usage rules clear and this extension would violate that (in my opinion).
On Fri, Aug 23, 2024 at 8:06 AM Ivan Yurov <ivan.your...@gmail.com> wrote: > The lambdas I want to be able to create using short notation are in the > second block of code in the original posting. They are slightly less > obvious than & &1 + 1. > As far as I understand, there's no way to compose them using short form, > unless I'm missing something. The idea to supply a number of arguments > along with introductory & is probably not gonna fly — it would look too > similar to argument itself, although there shouldn't be any ambiguity with > parsing since nested short form lambdas are not allowed anyways. Maybe &/2 > which would be consistent with captures? > > > On Thu, Aug 22, 2024 at 10:19 AM Ben Wilson <benwilson...@gmail.com> > wrote: > >> Hey Ivan, >> >> You're just missing the introductory & >> >> iex(1)> & &1 + 1 >> #Function<42.105768164/1 in :erl_eval.expr/6> >> >> On Wednesday, August 21, 2024 at 2:03:24 AM UTC-4 ivan.y...@gmail.com >> wrote: >> >>> I realize it might be controversial, but I truly enjoy short form >>> lambdas in any language I touch and Elixir is one of them. Yet I think >>> there's a couple of use cases that are uncovered. One is when you need to >>> encode a zero argument lambda returning a value and the second one is when >>> there are more arguments than actually used: >>> >>> iex(1)> &(&2 + 1) >>> >>> error: capture argument &2 cannot be defined without &1 (you cannot >>> skip arguments, all arguments must be numbered) >>> >>> └─ iex:1 >>> >>> >>> ** (CompileError) cannot compile code (errors have been logged) >>> >>> >>> iex(1)> &(1) >>> >>> error: capture argument &1 must be used within the capture operator & >>> >>> └─ iex:1 >>> >>> >>> ** (CompileError) cannot compile code (errors have been logged) >>> >>> I think both of these cases would be handled if we let explicitly >>> defining the arity of lambda: &2(&2 + 1) or something like that. Since >>> nested lambdas are not allowed anyways, this should work (unless I'm >>> missing something). And we'd assume if there's no access to the variables, >>> it would be a zero argument function, so &(1) would work too. >>> >>> This should be fundamentally possible, since I can do this: >>> >>> iex(9)> fn () -> :ok end >>> >>> #Function<43.105768164/0 in :erl_eval.expr/6> >>> >>> iex(10)> fn (_a, b) -> b * 2 end >>> >>> #Function<41.105768164/2 in :erl_eval.expr/6> >>> >>> So I assume it boils down to parsing? Either way, I'd love to see that >>> in Elixir and I'm willing to contribute some time to get it implemented if >>> the community approves it. >>> >> -- >> 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/g2tQI1FjcNU/unsubscribe >> . >> To unsubscribe from this group and all its topics, 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/11ca2681-4b0e-4875-ac48-455a5e684f6en%40googlegroups.com >> <https://groups.google.com/d/msgid/elixir-lang-core/11ca2681-4b0e-4875-ac48-455a5e684f6en%40googlegroups.com?utm_medium=email&utm_source=footer> >> . >> > > > -- > Kind regards, > Ivan Yurov > > -- > 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/CAAoaZy4gPokWC7urFA7sjqHzL%3DyVKdkHqGd6PM_Sc5o0MDtVGg%40mail.gmail.com > <https://groups.google.com/d/msgid/elixir-lang-core/CAAoaZy4gPokWC7urFA7sjqHzL%3DyVKdkHqGd6PM_Sc5o0MDtVGg%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 elixir-lang-core+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4K9SLYYFOU0dPAQ0uqAc7ms4Dq%2B8gPfX4Y0zY9uHJ4Frg%40mail.gmail.com.