for let x = 10, let y = 12, foo <- list do
{result, x, y}
end

Sent via Superhuman iOS ( https://sprh.mn/?vip=zachary.s.dan...@gmail.com )

On Tue, Dec 21 2021 at 4:35 PM, Zach Daniel < zachary.s.dan...@gmail.com > 
wrote:

> 
> I really like this, and would be happy with it as is 😁 I have one thought
> though, with the way that we are already doing a bit of “magic” (I don’t
> mean that in a negative way) to map the “let” variable to the second
> element of the tuple, could we support multiple assignments without the
> tuple in the let? Something like this (hard to type code on the phone 😂)
> 
> 
> 
> 
> for let x = 10, y = 12, foo <- list do
> {result, x, y}
> end
> 
> 
> Sent via Superhuman iOS ( https://sprh.mn/?vip=zachary.s.dan...@gmail.com )
> 
> 
> 
> 
> On Tue, Dec 21 2021 at 4:09 PM, Stefan Chrobot < ste...@chrobot.io > wrote:
> 
> 
>> I'm too voting in favor of the proposal in the current form. Unsure about
>> the parens, but looking forward to some way of replacing reduce_while with
>> some version of the for.
>> 
>> 
>> Best,
>> Stefan
>> 
>> wt., 21 gru 2021 o 21:47 Christopher Keele < christheke...@gmail.com >
>> napisał(a):
>> 
>> 
>>> *Guides Feedback*
>>> *
>>> *
>>> These look excellent, should make the power of for much more accessible.
>>> *
>>> *
>>> *let Feedback*
>>> 
>>> 
>>> I like the functionality of this proposal much more!
>>> 
>>> 
>>> I will say, I'm still not a fan of using new qualifiers. I'm not sure why
>>> we need to introduce a new special form for this, since we can do whatever
>>> we need to in the macro? What's wrong with:
>>> 
>>> 
>>> > for count = 0, count < 5, x <- element do {x, count + 1} end
>>> 
>>> 
>>> Perfectly matches traditional for loops, and pattern matching in function
>>> arguments, with all the familiar errors/warning possibly emitted from
>>> them,  while keeping the bodies identically functionally-refactorable. No 
>>> let
>>> s needed.
>>> 
>>> Re: for reduce , since for already has idiomatic keyword arguments to
>>> further modify functionality, isn't :reduce is doing fine as is? We'd just
>>> document how it interacts with for-bindings.
>>> 
>>> 
>>> > Furthermore, the introduction of let and reduce qualifiers opens up the
>>> option for new qualifiers in the future, such as for async that is built
>>> on top of Task.async_stream/3.
>>> >
>>> > Async doesn't have its own arguments
>>> 
>>> (
>>> https://gist.github.com/josevalim/fe6b0bcc728539a5adf9b2821bd4a0f5#naming
>>> )
>>> 
>>> 
>>> Similarly, I'm unsure what's wrong with add an async: true keyword
>>> argument. It's just behaviour configuration, not something we need to
>>> bring to the forefront as a pattern match?
>>> 
>>> 
>>> *Replies*
>>> *
>>> *
>>> > I am against the notion of `for_let` and `for_reduce`. I see that as
>>> using up more of the special forms "namespace".
>>> 
>>> 
>>> Agreed, mirroring my misgivings about "for let" and "for reduce".
>>> On Tuesday, December 21, 2021 at 11:58:19 AM UTC-5 gva...@gmail.com wrote:
>>> 
>>> 
>>> 
>>>> I'm a vote in favor of the proposal. I think I have a slight preference
>>>> for the parens. But it's very slight, and I'm not sure I wouldn't change
>>>> my mind after using it for a while.
>>>> 
>>>> 
>>>> I am against the notion of `for_let` and `for_reduce`. I see that as using
>>>> up more of the special forms "namespace".
>>>> 
>>>> 
>>>> I'm slightly disappointed that the old style `reduce:` option will be
>>>> deprecated (because I have old code I'll have to update) however, the
>>>> change does make things more consistent and I appreciate the thought about
>>>> future extensions to for comprehensions.
>>>> 
>>>> 
>>>> -Greg Vaughn
>>>> 
>>>> 
>>>> PS. I just watched your latest Twitch stream. I wish I could have been
>>>> there live to hear you read the dictionary and to offer obscure English
>>>> words to the bikeshed discussion :-D
>>>> 
>>>> 
>>>>> 
>>>> 
>>>> 
>>>> 
>>>>> On Dec 21, 2021, at 3:31 AM, José Valim < jose....@dashbit.co > wrote:
>>>>> 
>>>>> 
>>>> 
>>>> 
>>>> 
>>>>> Compared to the previous proposal, this one has been very quiet so far. :)
>>>>> I am unsure if it was because it was a Monday or because holidays are
>>>>> coming, so I am sending a ping.
>>>>> 
>>>>> 
>>>>> ALso note I updated the proposal to not use parens around let/reduce,
>>>>> which seems to be the preference so far: 
>>>>> https://gist.github.com/josevalim/fe6b0bcc728539a5adf9b2821bd4a0f5
>>>>> 
>>>>> 
>>>>> On Tue, Dec 21, 2021 at 1:29 AM 'eksperimental' via elixir-lang-core < 
>>>>> elixir-l...@googlegroups.com
>>>>> > wrote:
>>>>> 
>>>>> 
>>>>>> Not necessarily that they are replaceable,
>>>>>> but that pattern of :cont, :halt, :suspend is most commonly used via
>>>>>> Enumerable.reduce
>>>>>> 
>>>>>> 
>>>>>> On Mon, 20 Dec 2021 19:18:53 -0500
>>>>>> "'eksperimental' via elixir-lang-core"
>>>>>> < elixir-l...@googlegroups.com > wrote:
>>>>>> 
>>>>>> > > I have found only one usage of Enum.reduce_while in Elixir's
>>>>>> > > codebase.
>>>>>> >
>>>>>> > This is because under the hood Enum.reduce_while is a call
>>>>>> > `Enumerable.reduce/3`, so we are invoking this functions direcly.
>>>>>> 
>>>>>> >
>>>>>> >  On Tue, 21 Dec 2021 00:47:44 +0100
>>>>>> > Stefan Chrobot < ste...@chrobot.io > wrote:
>>>>>> >
>>>>>> > > Thanks, that version would work, but agreed - not sure how big of an
>>>>>> > > improvement that would be over Enum.reduce_while. Trying to think
>>>>>> > > about this in a more imperative style, it seems that maybe an
>>>>>> > > equivalent of break is what I'm after? Maybe something close to
>>>>>> > > Ecto's Repo.transaction semantics?
>>>>>> > >
>>>>>> > > for foo <- foos do
>>>>>> > >   case barify(foo) do
>>>>>> > >     {:ok, bar} -> bar
>>>>>> > >     {:error, reason} -> break(reason)
>>>>>> > >   end
>>>>>> > > end
>>>>>> > >
>>>>>> > > I think this would have to work similarly to how Ecto's transactions
>>>>>> > > work with Multis, that is return {:ok, bars} or {:error, reason,
>>>>>> > > data_so_far}.
>>>>>> > >
>>>>>> > > I have found only one usage of Enum.reduce_while in Elixir's
>>>>>> > > codebase. Interestingly, the shape of the return value is always
>>>>>> > > the same - a list of finished tests.
>>>>>> > > https://github.com/elixir-lang/elixir/blob/main/lib/ex_unit/lib/ex_unit/runner.ex#L340
>>>>>> 
>>>>>> > >
>>>>>> > > This seems like a separate problem, but maybe something to keep in
>>>>>> > > mind.
>>>>>> > >
>>>>>> > > Best,
>>>>>> > > Stefan
>>>>>> > >
>>>>>> > >
>>>>>> > > wt., 21 gru 2021 o 00:21 Ben Wilson < benwil...@gmail.com >
>>>>>> > > napisał(a):
>>>>>> > >
>>>>>> > > > To revisit the example situation from the original post:
>>>>>> > > >
>>>>>> > > > ```
>>>>>> > > > {sections, _acc} =
>>>>>> > > > for let {section_counter, lesson_counter} = {1, 1}, section <-
>>>>>> > > > sections do lesson_counter = if section["reset_lesson_position"],
>>>>>> > > > do: 1, else: lesson_counter
>>>>>> > > > {lessons, lesson_counter} = for let lesson_counter, lesson <-
>>>>>> > > > section["lessons"] do
>>>>>> > > > {Map.put(lesson, "position", lesson_counter), lesson_counter + 1}
>>>>>> > > > end
>>>>>> > > > section =
>>>>>> > > > section
>>>>>> > > > |> Map.put("lessons", lessons)
>>>>>> > > > |> Map.put("position", section_counter)
>>>>>> > > >
>>>>>> > > > {section, {section_counter + 1, lesson_counter}}
>>>>>> > > > end
>>>>>> > > > ```
>>>>>> > > >
>>>>>> > > > I think that's nice! It focuses on inputs and outputs and reduces
>>>>>> > > > the overall line noise.
>>>>>> > > >
>>>>>> > > > On Monday, December 20, 2021 at 5:28:29 PM UTC-5 José Valim wrote:
>>>>>> > > >
>>>>>> > > >> Stefan, this would work if we include all extensions:
>>>>>> > > >>
>>>>>> > > >> for reduce {status, acc} = {:ok, []}, status == :ok, foo <- foos
>>>>>> > > >> do case barify(foo) do
>>>>>> > > >>     {:ok, bar} -> {:ok, [bar | acc]}
>>>>>> > > >>
>>>>>> > > >>     {:error, _reason} = error -> error
>>>>>> > > >>   end
>>>>>> > > >> end
>>>>>> > > >>
>>>>>> > > >> I am not sure if you find it any better. It is hard to do this
>>>>>> > > >> with "let" because you don't want to include the element of when
>>>>>> > > >> it fails.
>>>>>> > > >>
>>>>>> > > >> On Mon, Dec 20, 2021 at 9:23 PM Stefan Chrobot
>>>>>> > > >> < ste...@chrobot.io > wrote:
>>>>>> > > >>> I went through some of our code and one thing I'd love to see is
>>>>>> > > >>> a way to replace Enum.reduce_while with the for comprehension.
>>>>>> > > >>> So the code like this:
>>>>>> > > >>>
>>>>>> > > >>> Enum.reduce_while(foos, {:ok, []}, fn foo, {:ok, bars} ->
>>>>>> > > >>>   case barify(foo) do
>>>>>> > > >>>     {:ok, bar} -> {:cont, {:ok, [bar | bars]}}
>>>>>> > > >>>     {:error, _reason} = error -> {:halt, error}
>>>>>> > > >>>   end
>>>>>> > > >>> end)
>>>>>> > > >>>
>>>>>> > > >>> Would the following even work?
>>>>>> > > >>>
>>>>>> > > >>> for reduce(result = {:ok, []}), foo <- foos, {:ok, _} <- result
>>>>>> > > >>> do case barify(foo) do
>>>>>> > > >>>     {:ok, bar} -> {{:ok, [bar | bars]}}
>>>>>> > > >>>     {:error, _reason} = error -> {error}
>>>>>> > > >>>   end
>>>>>> > > >>> end
>>>>>> > > >>>
>>>>>> > > >>> Even if it did, it's not doing a great job of communicating the
>>>>>> > > >>> intent and still potentially requires a Enum.reverse call. The
>>>>>> > > >>> intent here is "early exit with some value upon some condition
>>>>>> > > >>> or pattern mismatch".
>>>>>> > > >>>
>>>>>> > > >>>
>>>>>> > > >>> Best,
>>>>>> > > >>> Stefan
>>>>>> > > >>>
>>>>>> > > >>> pon., 20 gru 2021 o 21:06 Stefan Chrobot < ste...@chrobot.io >
>>>>>> > > >>> napisał(a):
>>>>>> > > >>>> I really like this proposal! For me it strikes the perfect
>>>>>> > > >>>> balance between terseness and explicitness that I've come to
>>>>>> > > >>>> enjoy in Elixir.
>>>>>> > > >>>>
>>>>>> > > >>>> My votes:
>>>>>> > > >>>> - Naming: let over given; just because it's shorter,
>>>>>> > > >>>> - Do use parents: let "feels" similar to var!.
>>>>>> > > >>>>
>>>>>> > > >>>> Best,
>>>>>> > > >>>> Stefan
>>>>>> > > >>>>
>>>>>> > > >>>> pon., 20 gru 2021 o 19:54 José Valim < jose....@dashbit.co >
>>>>>> > > >>>> napisał(a):
>>>>>> > > >>>>> Good point. I forgot to mention the :reduce option will be
>>>>>> > > >>>>> deprecated in the long term.
>>>>>> > > >>>>>
>>>>>> > > >>>>> On Mon, Dec 20, 2021 at 7:53 PM 'eksperimental' via
>>>>>> > > >>>>> elixir-lang-core < elixir-l...@googlegroups.com > wrote:
>>>>>> > > >>>>>
>>>>>> > > >>>>>> The proposal is very concise,
>>>>>> > > >>>>>> the only thing that would be problematic is the use of
>>>>>> > > >>>>>> `reduce` for two
>>>>>> > > >>>>>> different things,
>>>>>> > > >>>>>>
>>>>>> > > >>>>>> for <<x <- "AbCabCABc">>, x in ?a..?z, reduce: %{} do
>>>>>> > > >>>>>>   acc -> Map.update(acc, <<x>>, 1, & &1 + 1)
>>>>>> > > >>>>>> end
>>>>>> > > >>>>>>
>>>>>> > > >>>>>> {sum, count} =
>>>>>> > > >>>>>>   for reduce({sum, count} = {0, 0}), i <- [1, 2, 3] do
>>>>>> > > >>>>>>     sum = sum + i
>>>>>> > > >>>>>>     count = count + 1
>>>>>> > > >>>>>>     {sum, count}
>>>>>> > > >>>>>>   end
>>>>>> > > >>>>>>
>>>>>> > > >>>>>> It would lead to misunderstanding as it may not be clear
>>>>>> > > >>>>>> which one we are talking about when we say "use for reduce"
>>>>>> > > >>>>>>
>>>>>> > > >>>>>>
>>>>>> > > >>>>>>  On Mon, 20 Dec 2021 19:11:54 +0100
>>>>>> > > >>>>>> José Valim < jose....@dashbit.co > wrote:
>>>>>> > > >>>>>>
>>>>>> > > >>>>>> > Hi everyone,
>>>>>> > > >>>>>> >
>>>>>> > > >>>>>> > This is the second proposal for-let. You can find it in a
>>>>>> > > >>>>>> > gist:
>>>>>> > > >>>>>> > https://gist.github.com/josevalim/fe6b0bcc728539a5adf9b2821bd4a0f5
>>>>>> 
>>>>>> > > >>>>>> >
>>>>>> > > >>>>>> > Please use the mailing list for comments and further
>>>>>> > > >>>>>> > discussion. Thanks for all the feedback so far!
>>>>>> > > >>>>>> >
>>>>>> > > >>>>>>
>>>>>> > > >>>>>> --
>>>>>> > > >>>>>> 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-co...@googlegroups.com.
>>>>>> > > >>>>>> To view this discussion on the web visit
>>>>>> > > >>>>>> https://groups.google.com/d/msgid/elixir-lang-core/61c0d119.1c69fb81.af520.c181SMTPIN_ADDED_MISSING%40gmr-mx.google.com
>>>>>> 
>>>>>> > > >>>>>> .
>>>>>> > > >>>>>>
>>>>>> > > >>>>> --
>>>>>> > > >>>>> 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-co...@googlegroups.com.
>>>>>> > > >>>>> To view this discussion on the web visit
>>>>>> > > >>>>> https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4LOyoAmXULJQo%2BYX4eFVJZJAoYtKHytoHujCS_kJ6AEuA%40mail.gmail.com
>>>>>> 
>>>>>> > > >>>>> < 
>>>>>> > > >>>>> https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4LOyoAmXULJQo%2BYX4eFVJZJAoYtKHytoHujCS_kJ6AEuA%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-co...@googlegroups.com.
>>>>>> > > >>>
>>>>>> > > >> To view this discussion on the web visit
>>>>>> > > >>> https://groups.google.com/d/msgid/elixir-lang-core/CACzMe7aXBL1jNM_aWmJJzYOjrK%3Dtf-4%2BLPLJLpccu_G4zr0cAg%40mail.gmail.com
>>>>>> 
>>>>>> > > >>> < 
>>>>>> > > >>> https://groups.google.com/d/msgid/elixir-lang-core/CACzMe7aXBL1jNM_aWmJJzYOjrK%3Dtf-4%2BLPLJLpccu_G4zr0cAg%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-co...@googlegroups.com.
>>>>>> > > > To view this discussion on the web visit
>>>>>> > > > https://groups.google.com/d/msgid/elixir-lang-core/c1fea9e2-f47c-4236-812a-431bc7d76d62n%40googlegroups.com
>>>>>> 
>>>>>> > > > < 
>>>>>> > > > https://groups.google.com/d/msgid/elixir-lang-core/c1fea9e2-f47c-4236-812a-431bc7d76d62n%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 elixir-lang-co...@googlegroups.com.
>>>>>> To view this discussion on the web visit 
>>>>>> https://groups.google.com/d/msgid/elixir-lang-core/61c11ffb.1c69fb81.9b607.f827SMTPIN_ADDED_MISSING%40gmr-mx.google.com
>>>>>> .
>>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> 
>>>>> --
>>>>> 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-co...@googlegroups.com.
>>>>> 
>>>>> 
>>>> 
>>>> 
>>>>> To view this discussion on the web visit 
>>>>> https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4K9WRhyaGpXy8Ds%3DbEq%3DpapgF6w%2BRciB-PY6M6Xe5%2BoFQ%40mail.gmail.com
>>>>> (
>>>>> https://groups.google.com/d/msgid/elixir-lang-core/CAGnRm4K9WRhyaGpXy8Ds%3DbEq%3DpapgF6w%2BRciB-PY6M6Xe5%2BoFQ%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/1990bd4f-ce14-43cb-958a-5e261a9a3d22n%40googlegroups.com
>>> (
>>> https://groups.google.com/d/msgid/elixir-lang-core/1990bd4f-ce14-43cb-958a-5e261a9a3d22n%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 elixir-lang-core+unsubscr...@googlegroups.com.
>> To view this discussion on the web visit 
>> https://groups.google.com/d/msgid/elixir-lang-core/CACzMe7aQ5h8UEsKtqW5_rNLQQqjzWt-t4oR_WW8-sRzT808O4w%40mail.gmail.com
>> (
>> https://groups.google.com/d/msgid/elixir-lang-core/CACzMe7aQ5h8UEsKtqW5_rNLQQqjzWt-t4oR_WW8-sRzT808O4w%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/kxgmled3.ae1de33d-c749-42da-af7e-ea64306fc6db%40we.are.superhuman.com.

Reply via email to