[racket] Generics and modules
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