*Re: for section <- sections, $section_counter = 1, $lesson_counter = 1 do*

I did consider introducing (precisely) $ for variables but my concern is
that, by introducing special syntax, I believe most would expect it to be
fully mutable, so you can modify it from any scope. That's why I decided to
go with plain variables, because they already have a limited scope in
Elixir and clear rules (but at the same time I agree that adding :let would
make those clear rules precisely more confusing!).

On Fri, Dec 17, 2021 at 7:01 AM Christopher Keele <christheke...@gmail.com>
wrote:

> I love the thought put into this proposal, and really like the problem it
> is tackling! I am looking forward to the next proposal and will try to get
> to my inbox earlier for it.
>
> *Proposal Feedback*
>
> I mostly second the impressions voiced here, but *really* want to call
> attention to the criticism:
>
> *> this breaks refactoring for the inner contents of `for`*
>
> This is the real true deal-breaker for me. Referential transparency is a
> huge part of my mental model of Elixir and the key reason why it is such a
> joy to maintain code in. I am not sure if it is possible to introduce an
> imperative-loop construct that *doesn't* violate this property, so I may
> have to get over that. I do remember how painful it was to remove
> assignment-inside-ifs, though.
>
> *Replies*
>
> *Re: **for section <- sections, $section_counter = 1, $lesson_counter = 1
> do*
>
> *> Maybe a possibility could be to distinguish comprehension variables,
> for example by prefixing them in the same way as module attributes are
> prefixed with `@`.*
>
> This does elegantly solve my refactoring concern; in that "imperative"
> comprehension variables copied out of the comprehension could immediately
> raise a syntax error, as would moving them into a different comprehension
> that does not have them declared as imperative in the comprehension head.
> The compiler would also have to enforce never letting you use the same name
> with an imperative variables as with a normal one, to completely eliminate
> edge cases. I think this solution even works for nested comprehensions,
> though I still am not sure how *that* would work with the existing
> proposal.
>
> *> We could maybe even remove the `let` keyword altogether?*
>
> *That * makes me really like syntax. We are not exactly running short on
> propositions but it nice to keep that overhead low. Also, the only other
> existing identifier syntax (module attributes) use a prefix/sigil approach
> as well, and this feels in the same category to me: we are introducing a
> different type of identifier with different scoping rules (even though what
> happens at compile time to it is wildly different).
>
> *Re: **overloading the **<- operator*
>
> *> My concern about this is that `<-` in for means extracting something
> from the collection, so giving it another meaning inside an option can be
> quite confusing.*
>
> *> If I'm not mistaken it actually means pulling the next item from an
> enumerable.*
>
> FWIW I've been writing Elixir for years and I still forget when I crack
> open a *for* or for a *with* that I need to be using *<-* . I've just
> internalized it as the "powerful SpecialForms clause operator". So I don't
> think allowing its use in other powerful new constructs, potentially nested
> in *for* or *with*, or inside their options lists, would be confusing,
> from my perspective at least.
>
>
>
> --
> 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/72ee4929-efde-476e-9124-bacd7460c486n%40googlegroups.com
> <https://groups.google.com/d/msgid/elixir-lang-core/72ee4929-efde-476e-9124-bacd7460c486n%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/CAGnRm4%2BsbvBxoj1mECXzBna%3DJE-R8%2Bj-CBuRZvgAf%2BsLp2aMjw%40mail.gmail.com.

Reply via email to