[racket] generics + superstructs
This is not currently possible.
Currently, when a substruct defines methods, it replaces the entire
method table, and any non-implemented methods are considered absent.
I agree with you, though, that inheriting methods from superstructs
would be a better design. I've added it to the generics to-do list.
In the meantime, you can work around this by abstracting the body of
`some-base-stuff' into a separate functions, say `base-stuff', and then
using that function as the method (`(define some-base-stuff base-stuff)')
for both struct types.
Vincent
At Wed, 13 Mar 2013 20:39:01 +0400,
Dmitry Pavlov wrote:
>
> Hello,
>
> In short: I use inheritance of structures, I use structure generics,
> but I can not combine inheritance and generics in the way that seems
> the most natural.
>
>
> #lang racket
>
> (require racket/generic)
>
> (define-generics my
> (some-base-stuff my)
> (some-specific-stuff my))
>
> (struct base
> (base-field)
> #:methods gen:my
> ((define (some-base-stuff my)
> (print (base-base-field my)))))
>
> (struct specific base
> (specific-field)
> #:methods gen:my
> ((define (some-specific-stuff my)
> (print (specific-specific-field my)))))
>
> (some-base-stuff (specific 2 4))
>
> some-base-stuff: not implemented for #<specific>
>
>
> Can generic #:methods be possibly inherited from superstructure?
>
>
>
> Best regards,
>
> Dmitry
> ____________________
> Racket Users list:
> http://lists.racket-lang.org/users