Hi, I was trying to achieve something similar but found a problem in my code. I'll be glad if someone can help me solve this.
The idea is that I want to define a typed function and then I want to access the parameter types to define a different function. The file containing the macro stuff is: ;;;;;;;;;;;File test-macros.rkt #lang typed/racket (begin-for-syntax (require syntax/id-table) (define table (make-free-id-table)) (define (set-id-info! id info) (free-id-table-set! table id info)) (define (get-id-info id) (free-id-table-ref table id)) (provide get-id-info)) (define-syntax (define-saving-types stx) (syntax-case stx () [(def (name [p t] ...) body ...) (syntax/loc stx (begin (begin-for-syntax (set-id-info! #'name #'([p t] ...))) (define (name [p : t] ...) body ...)))])) (define-syntax (define-list-version stx) (syntax-case stx () [(def name from) (with-syntax ([([p t] ...) (get-id-info #'from)]) (syntax/loc stx (define (name [p : t] ...) (list p ...))))])) (provide define-saving-types define-list-version) ;;;;;;;;;;; Now, in a different file, I have: ;;;;;;;;;;;File foo.rkt #lang typed/racket (require "test-macros.rkt") (define-saving-types (foo [x Real] [y Float]) (+ x y)) (provide foo) (define-list-version bar foo) ;;;;;;;;;;; In the previous situation, everything works as expected: bar is defined using the same parameter types as foo. Unfortunately, if I decide to do a similar thing in a different file baz.rkt, I get an error, saying that there is no mapping for foo. ;;;;;;;;;;;File baz.rkt #lang typed/racket (require "test-macros.rkt") (require "foo.rkt") (define-list-version baz foo) ;;;;;;;;;;; Oddly, everything works as (I) expected if I move all the stuff to untyped racked (adjusting for the untyped definition syntax). What I'm I doing wrong? Best, António.
____________________ Racket Users list: http://lists.racket-lang.org/users