(define $Something (type {[$var-match (lambda [$tgt] {tgt})]})) (define $Bool (type {[$var-match (lambda [$tgt] {tgt})] [$inductive-match (destructor {[true [] {[ {[]}] [_ {}]}] [false [] {[ {[]}] [_ {}]}]})] [$equal? (lambda [$val $tgt] (match [val tgt] [Bool Bool] {[[ ] ] [[ ] ] [[_ _] ]}))]})) (define $or (lambda [$b1 $b2] (match b1 Bool {[ ] [ b2]}))) (define $and (lambda [$b1 $b2] (match b1 Bool {[ b2] [ ]}))) (define $not (lambda [$b] (match b Bool {[ ] [ ]}))) (define $Order (type {[$var-match (lambda [$tgt] {tgt})] [$inductive-match (destructor {[less [] {[ {[]}] [_ {}]}] [equal [] {[ {[]}] [_ {}]}] [greater [] {[ {[]}] [_ {}]}]})] [$equal? (lambda [$val $tgt] (match [val tgt] [Order Order] {[[ ] ] [[ ] ] [[ ] ] [[_ _] ]}))]}))