import"prelude/fn.kmp" import"lib/numbertheory.kmp" ; Slightly suspect rational based on 'Int' type type Rational { Rational Int Int } unRational : Rational -- Int Int =: [ { case | Rational -> } ] multRat : Rational Rational -- Rational =: [ dip(unRational) unRational dip(swap *) * Rational ] reduce : Rational -- Rational =: [ unRational dup2 gcd dup dip(swap dip(/)) / Rational ] addRat : Rational Rational -- Rational =: [ dip(unRational) unRational dip(swap) dup2 * dip(swap dip(swap) * dip(*) +) Rational reduce ] %foreign kabi multRat %foreign kabi addRat %foreign kabi reduce