(define $Integer (type { [,$n [] {[$tgt (if (eq-n? tgt n) {[]} {})]}] [_ [Something] {[$tgt {tgt}]}] })) (define $compare-integer (lambda [$m $n] (if (lt-n? m n) (if (eq-n? m n) )))) (define $Float (type {[,$d [] {[$tgt (if (eq-f? tgt d) {[]} {})]}] [_ [Something] {[$tgt {tgt}]}] })) (define $compare-float (lambda [$d1 $d2] (if (lt-f? d1 d2) (if (eq-f? d1 d2) )))) (define $Nat (type {[,$n [] {[$tgt (if (eq-n? tgt n) {[]} {})]}] [ [] {[0 {[]}] [_ {}]}] [ Nat {[$tgt (match (compare-integer tgt 0) Order {[ {(- tgt 1)}] [_ {}]})]}] [_ [Something] {[$tgt {tgt}]}] })) (define $between (lambda [$m $n] (match (compare-integer m n) Order {[ {m @(between (+ m 1) n)}] [ {n}] [ {}]}))) (define $min (lambda [$ns] (match ns (List Integer) {[> n] [ (let {[$r (min rs)]} (match (compare-integer n r) Order {[ n] [_ r]}))]}))) (define $max (lambda [$ns] (match ns (List Integer) {[> n] [ (let {[$r (max rs)]} (match (compare-integer n r) Order {[ n] [_ r]}))]}))) (define $min&max (lambda [$ns] (match ns (List Integer) {[> [n n]] [ (let {[[$min-n $max-n] (min&max rs)]} (match (compare-integer n min-n) Order {[ [n max-n]] [_ (match (compare-integer n max-n) Order {[ [min-n n]] [_ [min-n max-n]]})]}))]}))) (define $gcd (lambda [$ns] (match ns (Set Integer) {[> n] [ (gcd {m @((remove-all Integer) (map (lambda [$r] (mod r m)) rs) 0)})]}))) (define $fib (lambda [$n] (letrec {[$fib1 (lambda [$n $ret1 $ret2] (match n Nat {[ ret2] [> ret1] [ (fib1 (- n 1) (+ ret1 ret2) ret1)] }))]} (fib1 n 1 1)))) (define $fact (lambda [$n] (letrec {[$fact1 (lambda [$n $ret] (match n [Nat] {[ ret] [ (fact1 n1 (* n ret))]}))]} (fact1 n 1)))) (define $Mod (lambda [$m] (type {[,$n [] {[$tgt (if (eq-n? (mod tgt m) (mod n m)) {[]} {})]}] [_ [Something] {[$tgt {(mod tgt m)}]}] })))