(define $Number (type {[$var-match (lambda [$tgt] {tgt})] [$equal? (lambda [$val $tgt] (= val tgt))]})) (define $Int Number) (define $Nat (type {[$var-match (lambda [$tgt] {tgt})] [$inductive-match (deconstructor {[o [] {[0 {[]}] [_ {}]}] [s [Nat] {[$tgt (match (compare-number tgt 0) Order {[ {(- tgt 1)}] [_ {}]})]}]})] [$equal? (lambda [$val $tgt] (= val tgt))]}))