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