Interesting...that works....but in this case, the struct is purely a port, since it has no other fields.  an-i is not really an instance of a struct i, but a definition that returns the value of an instance of a struct that takes as its sole field value a port.   IOW, it doesn&#39;t take as its only field value a string, and then use its port to output the string.<div>
<br></div><div>#lang racket</div><div>(struct i (x) #:property prop:input-port ((lambda (i)</div><div>                                                        (open-input-port (struct-field-index x)))</div><div><br></div><div>
(define an-i (i &quot;Hello&quot;))</div><div>(read an-i) =&gt; &quot;Hello&quot;</div><div> </div><div>Of course, this doesn&#39;t work at all....struct-field-index x is not available in the lambda....the only time that I have seen struct-field-index work is when the struct&#39;s property prop:procedure is set, and the struct suddenly becomes a procedure.</div>
<div><br></div><div>If it doesn&#39;t work as I thought, I think I&#39;m just failing to understand the value adding the port property to a struct, and how setting this property makes it easier to create custom ports.</div>
<div><br></div><div>A struct as a port is a strange animal.  For instance, I can write</div><div><br></div><div>(struct speaker (say) #:property prop:input-port (open-input-string &quot;Goodbye&quot;))</div><div>(define me (speaker &quot;Hello&quot;))</div>
<div>(display (speaker-say me)) =&gt; &quot;Hello&quot;</div><div>(display (read speaker)) =&gt; &quot;Goodbye&quot;</div><div><br></div><div>What would be cool, but perhaps is not possible is generating something like:</div>
<div><br></div><div>(display (read speaker)) = &quot;HelloGoodbye&quot;.   </div><div><br></div><div>IOW, the port actually has access to fields in the struct.  Otherwise, I just don&#39;t understand what the use-case is for adding the port property to the struct.  Might as well just assign one of the struct&#39;s fields to be a port, rather than the ceremony of setting a property on the struct.</div>
<div><br></div><div>Chad</div><div><br></div><div><div><div class="gmail_extra"><div class="gmail_quote">On Sat, Apr 21, 2012 at 2:04 PM, Eric Hanchrow <span dir="ltr">&lt;<a href="mailto:eric.hanchrow@gmail.com" target="_blank">eric.hanchrow@gmail.com</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">#lang racket<br>
(struct i (x) #:property prop:input-port 0)<br>
</div>(define (an-i str) (i (open-input-string str)))<br>
(read (an-i &quot;hello&quot;)) ;; yields &#39;hello</blockquote></div><br></div></div></div>