PasteRack.org | ||
Paste # 44174 | ||
2020-11-08 11:38:15 | ||
Fork as a new paste. | ||
Paste viewed 341 times. | ||
Tweet | ||
Embed: | ||
#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%))