On 2013-08-27 14:31:11 +0200, Konrad Hinsen wrote: > ----------------------------------------------------------- > (struct foo-bar (quux) > #:methods foo:gen:bar > [(define (baz x) (baz (foo-bar-quux x)))]) > ----------------------------------------------------------- > > But now the call to baz inside the method becomes a recursive call to > the method, rather than a call to the function baz defined in the > surrounding module. In fact, that's why I used (prefix-in ...) in the > first place.
This is what the `define/generic` form is for. You can then re-write your struct definition as (struct foo-bar (quux) #:methods foo:gen:bar [(define/generic gen-baz baz) (define (baz x) (gen-baz (foo-bar-quux x)))]) and it should work. > I tried to get around this with a local binding: > ----------------------------------------------------------- > (let ([temp baz]) > (struct foo-bar (quux) > #:methods foo:gen:bar > [(define (baz x) (temp (foo-bar-quux x)))])) > ----------------------------------------------------------- The error you're getting means that you need an expression to run in the `let` block and not just definitions. You also probably don't want to put the struct type definition in the `let` block because that makes the struct type local to that block. Cheers, Asumu ____________________ Racket Users list: http://lists.racket-lang.org/users