Actually using prop:dict works (I hadn’t found prop:dict yet when I first asked this) #lang typed/racket
(define-type Dict-Ref ([Dict Any] [Any] . ->* . Any)) (define-type Dict-Set! (Dict Any Any . -> . Void)) (define-type Dict-Set (Dict Any Any . -> . Dict)) (define-type Dict-Remove! (Dict Any . -> . Void)) (define-type Dict-Remove (Dict Any . -> . Dict)) (define-type Dict-Iterate-First (Dict . -> . Any)) (define-type Dict-Iterate-Next (Dict Any . -> . Any)) (define-type Dict-Iterate-Key (Dict Any . -> . Any)) (define-type Dict-Iterate-Value (Dict Any . -> . Any)) (define-type Dict-Count (Dict . -> . Natural)) (require/typed racket/dict [#:opaque Dict dict?] [dict-ref Dict-Ref] [dict-set! Dict-Set!] [dict-set Dict-Set] [dict-remove! Dict-Remove!] [dict-remove Dict-Remove] [dict-iterate-first Dict-Iterate-First] [dict-iterate-next Dict-Iterate-Next] [dict-iterate-key Dict-Iterate-Key] [dict-iterate-value Dict-Iterate-Value] [dict-count Dict-Count] [prop:dict Struct-Type-Property]) (define (make-dict-prop #:dict-ref [dict-ref : Dict-Ref] #:dict-set! [dict-set! : (U Dict-Set! #f) #f] #:dict-set [dict-set : (U Dict-Set #f) #f] #:dict-remove! [dict-remove! : (U Dict-Remove! #f) #f] #:dict-remove [dict-remove : (U Dict-Remove #f) #f] #:dict-count [dict-count : Dict-Count] #:dict-iterate-first [dict-iterate-first : Dict-Iterate-First] #:dict-iterate-next [dict-iterate-next : Dict-Iterate-Next] #:dict-iterate-key [dict-iterate-key : Dict-Iterate-Key] #:dict-iterate-value [dict-iterate-value : Dict-Iterate-Value]) (vector-immutable dict-ref dict-set! dict-set dict-remove! dict-remove dict-count dict-iterate-first dict-iterate-next dict-iterate-key dict-iterate-value)) (struct foo () #:transparent #:property prop:dict (make-dict-prop #:dict-ref (lambda (this key [failure #f]) "whatever") #:dict-count (lambda (this) 0) #:dict-iterate-first (lambda (this) #f) #:dict-iterate-next (lambda (this pos) 0) #:dict-iterate-key (lambda (this pos) pos) #:dict-iterate-value (lambda (this pos) "whatever"))) (dict-ref (assert (foo) dict?) "idontkare") On Sep 27, 2014, at 1:07 AM, Spencer florence <spencerflore...@gmail.com> wrote: > 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. > > > > On Sat, May 24, 2014 at 9:39 PM, Alexander D. Knauth <alexan...@knauth.org> > wrote: > > 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? > > 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. > > Otherwise I’ll just put it in an untyped submodule. > > > ____________________ > Racket Users list: > http://lists.racket-lang.org/users > >
____________________ Racket Users list: http://lists.racket-lang.org/users