packages feed

kempe-0.2.0.4: lib/rational.kmp

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