Ah, you’re right. Apologies. I think I’d still prefer not to overload it, but you are correct that it wouldn’t conflict.
On Tue, Dec 29, 2020 at 10:23 PM Austin Ziegler <halosta...@gmail.com> wrote: > Using an alternate form of `apply/2` would work, because, while there’s no > guard from the Elixir side, the second parameter of `apply/2` must be an > array. > > ``` > iex(1)> apply(fn q -> q end, fn -> nil end) > ** (ArgumentError) argument error > :erlang.length(#Function<21.126501267/0 in :erl_eval.expr/5>) > iex(1)> apply(fn q -> q end, [fn -> nil end]) > #Function<21.126501267/0 in :erl_eval.expr/5> > iex(2)> apply(& &1, 3) > ** (ArgumentError) argument error > :erlang.length(3) > iex(2)> apply(& &1, [3]) > 3 > iex(3)> apply(& &1, []) > ** (BadArityError) #Function<7.126501267/1 in :erl_eval.expr/5> with arity > 1 called with no arguments > ``` > > -a > > On Tue, Dec 29, 2020 at 3:59 PM Zach Daniel <zachary.s.dan...@gmail.com> > wrote: > >> That variant doesn’t really work because what if you want to pass a >> function as the first argument to what you’re calling? I don’t think >> muddying the behavior of “apply” is worth the extra confusion. I think >> either `tap/2` or a `with` Inspect option is the way. People will >> ultimately need to look this function up anyway, I don’t think the merit of >> the name is “would I guess this name based on what I want”, because most >> things on programming fail that litmus test 😂. We just need a >> memorable/reasonable name. >> >> On Tue, Dec 29, 2020 at 3:53 PM Louis Pilfold <louispopin...@gmail.com> >> wrote: >> >>> Heya >>> >>> "apply" is the name I first thought of here. In fact I've tried to use >>> apply like this before! >>> >>> Cheers, >>> Louis >>> >>> On Tue, 29 Dec 2020, 20:22 Austin Ziegler, <halosta...@gmail.com> wrote: >>> >>>> Couldn’t this be a special case of `Kernel.apply/2`? >>>> >>>> ```elixir >>>> @spec apply(fun | any, list(any) | fun) :: any >>>> def apply(arg, fun) when is_function(fun, 1)) do >>>> fun.(arg) >>>> end >>>> >>>> def apply(fun, args) do >>>> :erlang.apply(fun, args) >>>> end >>>> ``` >>>> >>>> This would read really well (IMO): >>>> >>>> ```elixir >>>> [1, 2, 3, 5, 7] >>>> |> apply(&Enum.map(&1, fn x -> x * 2 end)) >>>> ``` >>>> >>>> If it’s preferred not to make a special form of apply/2, then perhaps >>>> `then_apply/2`? >>>> >>>> -a >>>> >>>> On Tue, Dec 29, 2020 at 1:11 PM Paul Clegg <dotdotdotp...@gmail.com> >>>> wrote: >>>> >>>>> On Tue, Dec 29, 2020 at 1:47 AM José Valim <jose.va...@dashbit.co> >>>>> wrote: >>>>> >>>>>> I propose we simply add two functions to Kernel: tap and then. >>>>>> >>>>>> 1. tap receives an anonymous function, invokes it, and returns the >>>>>> argument. It can be found in Ruby and .NET Rx. >>>>>> >>>>>> 2. then receives an anonymous function, invokes it, and returns the >>>>>> result of the anonymous function. It will be how we can pipe to anonymous >>>>>> functions in Elixir. It is named andThen in Scala and known as then in >>>>>> many >>>>>> promise libraries across ecosystems. >>>>>> >>>>> >>>>> I'm all for "tap"; I've been writing this function myself for a while >>>>> now, as easy as it is... Not as sure about "then", though, I've been able >>>>> to get this to work without much problem, ala; >>>>> >>>>> iex(30)> foo = &(IO.puts(&1)) >>>>> &IO.puts/1 >>>>> iex(31)> "biff" |> (foo).() >>>>> biff >>>>> :ok >>>>> iex(32)> foo = &(&1 <> &2) >>>>> #Function<43.97283095/2 in :erl_eval.expr/5> >>>>> iex(33)> "biff" |> (foo).("bar") >>>>> "biffbar" >>>>> >>>>> The parens + .() combination seem to work just fine without any >>>>> additional work. It's just the tap that gets messy if you want to do it >>>>> "inline" often: >>>>> >>>>> iex(34)> "biff" |> (fn x -> IO.puts("foo"); x; end).() >>>>> foo >>>>> "biff" >>>>> >>>>> ...so for that, I'd love 'tap()' so I don't forget to return the >>>>> original x. :D >>>>> >>>>> ...Paul >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> >>>>> -- >>>>> 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/CAD3kWz-MCWvdbmTRe0qP5gz57%3Diy5fOcsmNLNT1cZRe5N_D9MA%40mail.gmail.com >>>>> <https://groups.google.com/d/msgid/elixir-lang-core/CAD3kWz-MCWvdbmTRe0qP5gz57%3Diy5fOcsmNLNT1cZRe5N_D9MA%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>>> . >>>>> >>>> >>>> >>>> -- >>>> Austin Ziegler • halosta...@gmail.com • aus...@halostatue.ca >>>> http://www.halostatue.ca/ • http://twitter.com/halostatue >>>> >>>> -- >>>> 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/CAJ4ekQtrodwKZsN0KE_omixojeuge1N2-3DDZjMbwvtNR_naSA%40mail.gmail.com >>>> <https://groups.google.com/d/msgid/elixir-lang-core/CAJ4ekQtrodwKZsN0KE_omixojeuge1N2-3DDZjMbwvtNR_naSA%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/CABu8xFA%2BUen_jgrt96skqmv91JCdV3-1JiRNz1fyL_w6B0SuWQ%40mail.gmail.com >>> <https://groups.google.com/d/msgid/elixir-lang-core/CABu8xFA%2BUen_jgrt96skqmv91JCdV3-1JiRNz1fyL_w6B0SuWQ%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/CAK-yb0AE1rH--%2BLoNFD54euC%2BSuvYVYWtn1bgBORh%3D3mMVuLOw%40mail.gmail.com >> <https://groups.google.com/d/msgid/elixir-lang-core/CAK-yb0AE1rH--%2BLoNFD54euC%2BSuvYVYWtn1bgBORh%3D3mMVuLOw%40mail.gmail.com?utm_medium=email&utm_source=footer> >> . >> > > > -- > Austin Ziegler • halosta...@gmail.com • aus...@halostatue.ca > http://www.halostatue.ca/ • http://twitter.com/halostatue > > -- > 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/CAJ4ekQuxuLqZhNv9cZAgBsh9QvcT-s2-sGn9Nf1%2BASDEHDkGqg%40mail.gmail.com > <https://groups.google.com/d/msgid/elixir-lang-core/CAJ4ekQuxuLqZhNv9cZAgBsh9QvcT-s2-sGn9Nf1%2BASDEHDkGqg%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/CAK-yb0A-dYo4PR_X%2BC%2BB5bB1gAHhpFA008Uz20_AZNbbTB9WoA%40mail.gmail.com.