(define $Suit (type {[,$suit [] {[$tgt (if (eq? tgt suit) {[]} {})]}] [ [] {[ {[]}] [_ {}]}] [ [] {[ {[]}] [_ {}]}] [ [] {[ {[]}] [_ {}]}] [ [] {[ {[]}] [_ {}]}] [_ [Something] {[$tgt {tgt}]}] })) (define $Mod (lambda [$m] (type {[$var-match (lambda [$tgt] {(mod tgt m)})] [$inductive-match (destructor {[,$n [] {[$tgt (if (= tgt n) {[]} {})]}]})] [$= (lambda [$val $tgt] (eq-n? (mod val m) (mod tgt m)))]}))) (define $Card (type {[,$card [] {[$tgt (match [val tgt] [Card Card] {[[ ] {[]}] [[_ _] {}]})]}] [ [Suit (Mod 13)] {[ {[s n]}]}] [_ [Something] {[$tgt {tgt}]}] })) (define $poker-hands (lambda [$Cs] (match Cs (Multiset Card) {[ !>>>>> ] [ ! ! !>>>>> ] [ ! !>>>>> ] [ ! ! ! ! !>>>>> ] [ !>>>>> ] [ >>>>> ] [ ! !>>>>> ] [ >>>>> ] [>>>>> ]})))