import Prelude hiding (Rational)

data Rational = Rat Integer Integer 
  deriving Show

-- Rat n d represents number n / d
  
-- task: basic arithmetic
timesRational, plusRational 
  :: Rational -> Rational -> Rational
timesRational (Rat n1 d1) (Rat n2 d2) = 
  normalizeRat (Rat (n1 * n2) (d1 * d2))

plusRational (Rat n1 d1) (Rat n2 d2) = 
  normalizeRat (Rat (n1 * d2 + n2 * d1) (d1 * d2))

normalizeRat :: Rational -> Rational
normalizeRat (Rat n d) = let
  g = gcd n d
  n1 = n `div` g
  d1 = d `div` g
 in if d1 > 0 then Rat n1 d1
    else if d1 == 0 then error "div by 0"
    else Rat (- n1) (- d1) 


negateRational, inverseRational 
  :: Rational -> Rational
negateRational = undefined
inverseRational = undefined 
  
-- (==) :: Rational -> Rational -> Bool 

createRational :: Integer -> Integer -> Rational
createRational = undefined