I like this proposal, it is simple and provides for more expressiveness 
while still being very clear to read. Why create a named function if you 
only use it in one place? Additionally, being able to capture values from 
the surrounding scope is a great way to avoid having to pass them all 
through, which can create noisy code unrelated to the actual functionality 
you are trying to implement.

On Tuesday, August 13, 2019 at 12:12:13 PM UTC-4, José Valim wrote:
>
> I have just asked to keep this thread on topic. In particular:
>
> 1. Can we focus on the pros and cons of what was proposed?
>
> 2. If we are going to propose other alternatives, can they be implemented 
> using regular functions/macros, and without introducing or re-purposing 
> existing syntactical constructs?
>
> As said, most syntactical options have already been discussed extensively 
> in the past. I am not personally interested in rehashing those arguments. 
> If someone is interested, please do so in another thread.
>
> Thank you,
>
> *José Valim*
> www.plataformatec.com.br
> Skype: jv.ptec
> Founder and Director of R&D
>
>
> On Tue, Aug 13, 2019 at 5:42 PM OvermindDL1 <[email protected] 
> <javascript:>> wrote:
>
>> On Tuesday, August 13, 2019 at 3:04:03 AM UTC-6, José Valim wrote:
>>>
>>> I really want to avoid new syntactical constructs or special casing 
>>> anonymous functions as I believe it will be more confusing in the long term.
>>>
>>
>> At that point adding in `.()` isn't a big deal, that's why it's pretty 
>> well fine as it is honestly for those kind of things.
>>
>> The main issue is just piping into another 'argument' of a function call, 
>> like the erlang standard library very much expects the 'subject' to be at 
>> the end, so I end up having to do a lot of things like:
>> ```
>> args
>> |> transform_them()
>> |> (&send(pid, &1)).()
>> ```
>> When it would look and feel so much more clean via anything like:
>> ```
>> args
>> |> transform_them()
>> |> &send(pid, &1) # Special case when `&` is in first position, though 
>> that does run into the expecting passing a `fun` to work
>>
>> args
>> |> transform_them()
>> |> send(pid, _) # Pipe into the 'hole'
>>
>> args
>> |> transform_them()
>> |> send(pid, _1) # Maybe index it, though this seems entirely needless
>>
>> args
>> |> transform_them()
>> |> send(pid, &0) # Or use `&0` as a pipe value, though then it looks less 
>> like an obvious hole and thus more easy to 'scan' past
>>
>> args
>> |> transform_them()
>> ~> send(pid, _) # Perhaps a different pipe operator for piping into, but 
>> this seems needless when `|>` can do it just fine
>> ```
>>
>> All of which are much more easily read.  And there are libraries for 
>> doing just this, they 'feel' so much more clean when I use them.  With all 
>> of all of the above no closures even need to be created, it doesn't look 
>> like an anonymous function (except maybe the `&0` one), the prior value 
>> is just dumped into 'that' slot instead of the front slot.  Honestly I'd 
>> prefer if it always required `_`, no magic 'stuff into front position' or 
>> anything, this would even allow you to reference the value more than once 
>> (set it to a gensym'd name then and put that in the holes).
>>
>> -- 
>> 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] <javascript:>.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/elixir-lang-core/0f96553b-4db8-43f3-9565-b7749526c6d5%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/elixir-lang-core/0f96553b-4db8-43f3-9565-b7749526c6d5%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/f3dc8d0b-9923-408f-b0e4-c72918ea99f6%40googlegroups.com.

Reply via email to