<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div>Actually using prop:dict works (I hadn’t found prop:dict yet when I first asked this)</div><div><div>#lang typed/racket</div><div><br></div><div>(define-type Dict-Ref ([Dict Any] [Any] . ->* . Any))</div><div>(define-type Dict-Set! (Dict Any Any . -> . Void))</div><div>(define-type Dict-Set (Dict Any Any . -> . Dict))</div><div>(define-type Dict-Remove! (Dict Any . -> . Void))</div><div>(define-type Dict-Remove (Dict Any . -> . Dict))</div><div>(define-type Dict-Iterate-First (Dict . -> . Any))</div><div>(define-type Dict-Iterate-Next (Dict Any . -> . Any))</div><div>(define-type Dict-Iterate-Key (Dict Any . -> . Any))</div><div>(define-type Dict-Iterate-Value (Dict Any . -> . Any))</div><div>(define-type Dict-Count (Dict . -> . Natural))</div><div><br></div><div>(require/typed racket/dict</div><div>               [#:opaque Dict dict?]</div><div>               [dict-ref Dict-Ref]</div><div>               [dict-set! Dict-Set!]</div><div>               [dict-set Dict-Set]</div><div>               [dict-remove! Dict-Remove!]</div><div>               [dict-remove Dict-Remove]</div><div>               [dict-iterate-first Dict-Iterate-First]</div><div>               [dict-iterate-next Dict-Iterate-Next]</div><div>               [dict-iterate-key Dict-Iterate-Key]</div><div>               [dict-iterate-value Dict-Iterate-Value]</div><div>               [dict-count Dict-Count]</div><div>               [prop:dict Struct-Type-Property])</div><div><br></div><div>(define (make-dict-prop #:dict-ref [dict-ref : Dict-Ref]</div><div>                        #:dict-set! [dict-set! : (U Dict-Set! #f) #f]</div><div>                        #:dict-set [dict-set : (U Dict-Set #f) #f]</div><div>                        #:dict-remove! [dict-remove! : (U Dict-Remove! #f) #f]</div><div>                        #:dict-remove [dict-remove : (U Dict-Remove #f) #f]</div><div>                        #:dict-count [dict-count : Dict-Count]</div><div>                        #:dict-iterate-first [dict-iterate-first : Dict-Iterate-First]</div><div>                        #:dict-iterate-next [dict-iterate-next : Dict-Iterate-Next]</div><div>                        #:dict-iterate-key [dict-iterate-key : Dict-Iterate-Key]</div><div>                        #:dict-iterate-value [dict-iterate-value : Dict-Iterate-Value])</div><div>  (vector-immutable dict-ref</div><div>                    dict-set!</div><div>                    dict-set</div><div>                    dict-remove!</div><div>                    dict-remove</div><div>                    dict-count</div><div>                    dict-iterate-first</div><div>                    dict-iterate-next</div><div>                    dict-iterate-key</div><div>                    dict-iterate-value))</div><div><br></div><div>(struct foo () #:transparent</div><div>  #:property prop:dict</div><div>  (make-dict-prop #:dict-ref (lambda (this key [failure #f]) "whatever")</div><div>                  #:dict-count (lambda (this) 0)</div><div>                  #:dict-iterate-first (lambda (this) #f)</div><div>                  #:dict-iterate-next (lambda (this pos) 0)</div><div>                  #:dict-iterate-key (lambda (this pos) pos)</div><div>                  #:dict-iterate-value (lambda (this pos) "whatever")))</div><div><br></div><div>(dict-ref (assert (foo) dict?) "idontkare")</div></div><div><br></div><br><div><div>On Sep 27, 2014, at 1:07 AM, Spencer florence <<a href="mailto:spencerflorence@gmail.com">spencerflorence@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">
<span id="mailbox-conversation">I don’t think you can. You would need define the struct in an untyped module then require it via require/typed. This is why dict’s don’t work in typed/racket either.</span><div class="mailbox_signature"><br></div>
<br><br><div class="gmail_quote"><p>On Sat, May 24, 2014 at 9:39 PM, Alexander D. Knauth <span dir="ltr"><<a href="mailto:alexander@knauth.org" target="_blank">alexander@knauth.org</a>></span> wrote:<br></p><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;"><p>Do generic interfaces work using structure type properties, and if they do, is there a way to use generic interfaces through properties so that I can do it in typed racket?  
<br><br>Specifically I’m trying to use the gen:custom-write and gen:dict generic interfaces.  I can use prop:custom-write for the first one, but I don’t know what to do for gen:dict.  
<br><br>Otherwise I’ll just put it in an untyped submodule.  
<br><br><br>____________________
<br>  Racket Users list:
<br>  <a href="http://lists.racket-lang.org/users">http://lists.racket-lang.org/users</a>
<br></p></blockquote></div><br></blockquote></div><br></body></html>