The current (and only) use-case I have for this is embellishing expansion with type annotations to assist with inferencing.  When the inferencing improves this use-case vanishes.  The current example at hand is the expansion of racket/place&#39;s (place ch body ...) - to roughly -&gt;  (lambda (ch) body ...) and with `ch&#39; now as Any, where (lambda: ((ch : Place-Channel)) body ...) would assist TR.  But I understand and agree with avoid conditional code.<div>
<div><div><div><br></div><div><br></div></div></div></div><div class="gmail_extra"><br><br><div class="gmail_quote">On Mon, Nov 5, 2012 at 3:43 PM, Sam Tobin-Hochstadt <span dir="ltr">&lt;<a href="mailto:samth@ccs.neu.edu" target="_blank">samth@ccs.neu.edu</a>&gt;</span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="im">On Mon, Nov 5, 2012 at 3:28 PM, Ray Racine &lt;<a href="mailto:ray.racine@gmail.com">ray.racine@gmail.com</a>&gt; wrote:<br>

&gt; On syntax expansion.  Is there a way to determine in the macro whether I&#39;m<br>
&gt; expanding in a typed/racket environment vs regular racket.? Say for example<br>
&gt; in place.rkt conditionally embellish the syntax templates with additional TR<br>
&gt; annotations if the syntax is being expanded in TR vs R.<br>
<br>
</div>Jay is correct about how to do this, but you shouldn&#39;t need to.  In<br>
particular, the TR annotations are all ignored by other tools, so it&#39;s<br>
safe to add them unconditionally.<br>
<div><div class="h5"><br>
&gt;<br>
&gt; Thanks,<br>
&gt;<br>
&gt;<br>
&gt; On Mon, Nov 5, 2012 at 3:14 PM, Ray Racine &lt;<a href="mailto:ray.racine@gmail.com">ray.racine@gmail.com</a>&gt; wrote:<br>
&gt;&gt;<br>
&gt;&gt; OK, so it is a little bit of red herring on the unbound identifer<br>
&gt;&gt; `place?&#39;, i.e. there is an unexported identifier(s) in the expansion of<br>
&gt;&gt; `place?&#39; which is the true issue.   For what it&#39;s worth is yet another level<br>
&gt;&gt; of syntax explosion below `place?&#39;.  But if I get the full explosion graph<br>
&gt;&gt; of these these internal procedures situated into base-special-env.rkt it<br>
&gt;&gt; will all clear up is what I&#39;m taking away.  A quick glance leads me to<br>
&gt;&gt; believe it is less than a dozen, which means doable in finite time.<br>
&gt;&gt;<br>
&gt;&gt; Time to saddle up and start charging them windmills.<br>
&gt;&gt;<br>
&gt;&gt; Thanks,<br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; On Mon, Nov 5, 2012 at 2:50 PM, Sam Tobin-Hochstadt &lt;<a href="mailto:samth@ccs.neu.edu">samth@ccs.neu.edu</a>&gt;<br>
&gt;&gt; wrote:<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On Mon, Nov 5, 2012 at 1:58 PM, Ray Racine &lt;<a href="mailto:ray.racine@gmail.com">ray.racine@gmail.com</a>&gt; wrote:<br>
&gt;&gt;&gt; &gt; Consider the innocuous appearing snippit below from<br>
&gt;&gt;&gt; &gt; collects/racket/place/distributed/examples/hello-world.rkt<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; #lang typed/racket<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; (require racket/place/distributed<br>
&gt;&gt;&gt; &gt;          racket/place)<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; (provide hello-world)<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; (: hello-world (-&gt; Place))<br>
&gt;&gt;&gt; &gt; (define (hello-world)<br>
&gt;&gt;&gt; &gt;   (place ch<br>
&gt;&gt;&gt; &gt;          (printf &quot;hello-world received: ~a\n&quot;<br>
&gt;&gt;&gt; &gt;                  (place-channel-get (assert ch place-channel?)))<br>
&gt;&gt;&gt; &gt;          (define HW &quot;Hello World&quot;)<br>
&gt;&gt;&gt; &gt;          (place-channel-put (assert ch place-channel?) (format &quot;~a\n&quot;<br>
&gt;&gt;&gt; &gt; HW))<br>
&gt;&gt;&gt; &gt;          (printf &quot;hello-world sent: ~a\n&quot; HW)))<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; First issue is:<br>
&gt;&gt;&gt; &gt; `place&#39; is syntax entailing 2 closed over procs `place/proc&#39; and<br>
&gt;&gt;&gt; &gt; `start-place defined in racket/place.  No prob. I know the secret<br>
&gt;&gt;&gt; &gt; incantation.<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; So I add a couple of strawman typings base-special-env.rkt and these<br>
&gt;&gt;&gt; &gt; immediate undefined identifier errors magically go away.<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;  ;; from the expansion of `place&#39;<br>
&gt;&gt;&gt; &gt;   [(make-template-identifier &#39;place/proc &#39;racket/place)<br>
&gt;&gt;&gt; &gt;    (-&gt; -Variable-Reference -Symbol -Symbol (-&gt; -Symbol<br>
&gt;&gt;&gt; &gt; -Resolved-Module-Path<br>
&gt;&gt;&gt; &gt; -Symbol (-opt -Input-Port) (-opt -Output-Port) (-opt -Output-Port)<br>
&gt;&gt;&gt; &gt; -Place)<br>
&gt;&gt;&gt; &gt;        (-opt -Input-Port) (-opt -Output-Port) (-opt -Output-Port)<br>
&gt;&gt;&gt; &gt;        -Place)]<br>
&gt;&gt;&gt; &gt;   [(make-template-identifier &#39;start-place &#39;racket/place)<br>
&gt;&gt;&gt; &gt;    (-&gt; -Symbol -Resolved-Module-Path -Symbol (-opt -Input-Port) (-opt<br>
&gt;&gt;&gt; &gt; -Output-Port) (-opt -Output-Port)<br>
&gt;&gt;&gt; &gt;        -Place)]<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; The next one in the conga line is an unknown identifier error for<br>
&gt;&gt;&gt; &gt; `place?&#39;,<br>
&gt;&gt;&gt; &gt; which _is_ publicly exported by racket/place.  But `place?&#39; is itself<br>
&gt;&gt;&gt; &gt; syntax, so I donno, we have some sort of require-syntax-for-syntax sort<br>
&gt;&gt;&gt; &gt; of<br>
&gt;&gt;&gt; &gt; thing going on.<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; Just for laughs I tossed the below into base-special-env.rkt. and now<br>
&gt;&gt;&gt; &gt; hello-world.rkt has errors on duplicate definition of `place?&#39;.<br>
&gt;&gt;&gt; &gt;  [(make-template-identifier &#39;place? &#39;racket/place)<br>
&gt;&gt;&gt; &gt;    (-&gt; Univ -Boolean)]<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; If `place?` is indeed exported by `racket/place`, then the above won&#39;t<br>
&gt;&gt;&gt; work.  You&#39;ll need to give a type to the internal identifier that<br>
&gt;&gt;&gt; `place?` expands into.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; However, looking at the expansion of the hello-world.rkt program, it<br>
&gt;&gt;&gt; doesn&#39;t seem to contain `place?`.  So I&#39;m confused as to where that&#39;s<br>
&gt;&gt;&gt; coming from.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Finally, the way the `place` form works means that it would be better<br>
&gt;&gt;&gt; to give a type annotation to `ch` using the #{ch : Place} form.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; &gt; Any ideas on how move forward?  The idea was to take a run at TRing the<br>
&gt;&gt;&gt; &gt; collects/racket/place/distributed/examples/hello-world.rkt<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; Thanks in advance,<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; Ray<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt; &gt; ____________________<br>
&gt;&gt;&gt; &gt;   Racket Users list:<br>
&gt;&gt;&gt; &gt;   <a href="http://lists.racket-lang.org/users" target="_blank">http://lists.racket-lang.org/users</a><br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; --<br>
&gt;&gt;&gt; sam th<br>
&gt;&gt;&gt; <a href="mailto:samth@ccs.neu.edu">samth@ccs.neu.edu</a><br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;<br>
<br>
<br>
<br>
</div></div>--<br>
sam th<br>
<a href="mailto:samth@ccs.neu.edu">samth@ccs.neu.edu</a><br>
</blockquote></div><br></div>