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.

Reply via email to