module Math.Eyptian
    ( egyptian
    ) where

import           Data.Ratio

-- | If given @0@ as input, returns @[]@.
egyptian :: (Integral a) => Ratio a -> [Ratio a]
egyptian z = if x == 0
    then []
    else 1 % ceiling (f y / f x) : egyptian (((-y) `mod` x) % (y * ceiling (f y / f x)))
    where x = numerator z
          y = denominator z
          f = (%1)