<div dir="ltr"><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Den tors 14 jan. 2021 kl 19:14 skrev Leonard B <<a href="mailto:leonard.boyce@lucidlayer.com">leonard.boyce@lucidlayer.com</a>>:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">I ask myself, since there are already 'erlangy' scoping rules for<br>
variables (esp with funs) would it not just be better to change those<br>
to more fully allow defined variables from outer scope within<br>
fun/comprehension scope?<br>
IE, if a variable is previously assigned within the outer scope use<br>
that variable within the inner scope.<br>
This, in my addled mind, makes more sense<br>
<br>
EG:<br>
%% X is from outer scope, L is from outer scope, V is local to comprehension<br>
X = 5.<br>
L = [1,2,3,4,5].<br>
[V || {X, V} <- L].<br><div dir="ltr"><br clear="all"></div></blockquote><div><br></div><div>It's certainly doable, especially since we already have warnings by default against shadowing. We'd need to first start deprecating, then forbidding shadowing, and then finally start allowing use of already bound variables instead. However it does nothing about the current situation with ordinary patterns in cases, receives, etc., making the language more uniform but adding even more places where it can be hard to see what is going on, or to accidentally change the meaning of a clause by renaming a variable.</div><div><br></div><div>By adding the ^-annotations, we get both worlds: complete clarity about what a variable use means, as well as the ability to refer to already bound ones in funs and list comprehensions, while keeping the possibility of using shadowing for fun variables (something many would see as a fundamental property of lambda expressions).</div><div><br></div><div>         /Richard</div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div class="gmail_quote"><div dir="ltr" class="gmail_attr"></div></div>
</blockquote></div></div>