Если в typed/racket я определяю три struct
:
(struct: foo ([a : Number]))
(struct: bar ([b : String]))
(struct: st ([a : Number] [b : String] [c : Number]))
Как сделать так, чтобы st
был одновременно подтипом foo
и bar
, чтобы работали оба следующих типа?
((λ: ([x : bar]) x) (st 1 "b" 3))
((λ: ([x : foo]) x) (st 1 "b" 3))
Меня интересует любое решение или хак, который может обеспечить подобную функцию, будь то множественное наследование, повторная реализация struct
через функции или что-то еще. Я уже определяю свои struct
с помощью макроса, поэтому, если мне нужно сгенерировать немного шаблонного кода, это не имеет значения.