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