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.