Hi, I'm trying to go from a small racket program that uses classes to a typed racket version of the program, but I can't find a combination of types that works. (The untyped version works as intended.)
Specifically, if I have a recipe% class, and an amount-mixin and unit-mixin , and each of these 3 have 1-argument init specifiers, how do I add types to both mixins such that (amount-mixin (unit-mixin recipe%)) works? (edited) The untyped version: #lang racket/base (require racket/class) (define recipe% (class object% (init name #;steps ) (super-new) (define _name name) ;(define _steps steps) ;(define/public (get-steps) _steps) (define/public (get-name) _name))) (define (amount-mixin %) (class % (init amount) (define _amount amount) (super-new) (inherit get-name) (define/public (get-amount) _amount))) (define (unit-mixin %) (class % (init unit) (define _unit unit) (super-new) (inherit get-name) (define/public (get-unit) _unit))) (unit-mixin (amount-mixin recipe%)) And the typed version (that raises an error): #lang typed/racket/base (require typed/racket/class) (define-type recipe<%> (Class (init [name String]) (get-name (-> String)))) (: recipe% recipe<%>) (define recipe% (class object% (init [name : String]) (super-new) (: _name String) (define _name name) (define/public (get-name) _name))) (: amount-mixin (-> recipe<%> (Class #:implements recipe<%> (init [amount Number] [name String]) (get-amount (-> Number))))) (define (amount-mixin %) (class % (init [amount : Number]) (: _amount Number) (define _amount amount) (super-new) (inherit get-name) (define/public (get-amount) _amount))) (: unit-mixin (-> recipe<%> (Class #:implements recipe<%> (init [unit String] [name String]) (get-unit (-> String))))) (define (unit-mixin %) (class % (init [unit : String]) (: _unit String) (define _unit unit) (super-new) (inherit get-name) (define/public (get-unit) _unit))) (unit-mixin (amount-mixin recipe%)) Any advice on how to make this work? Or whether to simply not do this in typed racket? Regards, Hashim. -- You received this message because you are subscribed to the Google Groups "Racket Users" group. To unsubscribe from this group and stop receiving emails from it, send an email to racket-users+unsubscr...@googlegroups.com. To view this discussion on the web visit https://groups.google.com/d/msgid/racket-users/59b0b8f4-beb6-4bf9-89e4-82e3fb74e148n%40googlegroups.com.