<div class="gmail_quote">On Fri, May 4, 2012 at 2:52 PM, Eli Barzilay <span dir="ltr">&lt;<a href="mailto:eli@barzilay.org" target="_blank">eli@barzilay.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0pt 0pt 0pt 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">

<div class="im">20 minutes ago, J. Ian Johnson wrote:<br>
&gt; That behavior would be really spooky to me. I would expect binding<br>
&gt; positions to not depend on any environmental information.<br>
<br>
</div>(It&#39;s still the same, only the definition of what is a binding<br>
position is a bit different.)<br>
<div class="im"><br>
<br>
&gt; Perhaps have an (id _) form that would allow putting your special<br>
&gt; identifiers there.<br>
<br>
</div><div class="im">And, Carl Eastlund wrote:<br>
&gt; If we add some kind of id expanders for match patterns, we need to<br>
&gt; add a way for pattern variables to shadow these names if the author<br>
&gt; really wants to.   Otherwise, every id expander defined eats up more<br>
&gt; namespace that match variables cannot bind.<br>
&gt;<br>
&gt; We already have this issue with _ and ..., but at least that&#39;s a<br>
&gt; known set of constant size.<br>
<br>
</div>Some (id &lt;name&gt;) be possible, but definitely an overkill for the<br>
purpose of `null&#39; etc.  Like I said, there should be *very* few of<br>
them in `#lang racket&#39;.  The rest are for your own convenience, as in<br>
Madoka&#39;s case (and in a few cases I ran into).  I could obviously<br>
define and provide a match expander for `x&#39; in my library that you&#39;ll<br>
want to use -- but that&#39;s the same as providing you with my own `if&#39;.<br>
<br>
The bottom line is that if this change is done, then such an `id&#39; form<br>
would not be necessary -- either it&#39;s for obvious names (the few that<br>
are done in the library), or for names that you defined which you&#39;re<br>
supposed to know about.<br></blockquote></div><br>It&#39;s not a question of how many there are, or who knows about them.  Providing your own &quot;if&quot; does not prevent others from shadowing &quot;if&quot; with let or any other binding form.  In a large enough project, lots of names can get imported from lots of sources.  The nice thing about well-behaved macros is that you don&#39;t need to keep all of them in mind at all times when deciding what names to bind locally.  Having match expanders that cannot be shadowed by match variables turns match into an ill-behaved macro, in a very similar way to how let behaves in unhygienic macros.<br>

<br>Any time a new mechanism only works as proposed if it&#39;s used for &quot;*very* few&quot; cases, that suggests a flaw with the mechanism.  If we add id expanders for match, let&#39;s design them so they can be used frequently without causing problems.<br>

<br>--Carl<br>