module Unwitch.Convert.Ratio
( unwrapIfDenominatorOne
, fromIntegralToRatio
, toFloat
, toDouble
)
where
import Data.Ratio(Ratio, (%))
import qualified Data.Ratio as Ratio
unwrapIfDenominatorOne :: (Eq a, Num a) => Ratio a -> Maybe a
unwrapIfDenominatorOne :: forall a. (Eq a, Num a) => Ratio a -> Maybe a
unwrapIfDenominatorOne Ratio a
s = if Ratio a -> a
forall a. Ratio a -> a
Ratio.denominator Ratio a
s a -> a -> Bool
forall a. Eq a => a -> a -> Bool
== a
1 then
a -> Maybe a
forall a. a -> Maybe a
Just (a -> Maybe a) -> a -> Maybe a
forall a b. (a -> b) -> a -> b
$ Ratio a -> a
forall a. Ratio a -> a
Ratio.numerator Ratio a
s
else Maybe a
forall a. Maybe a
Nothing
fromIntegralToRatio :: (Integral a) => a -> Ratio a
fromIntegralToRatio :: forall a. Integral a => a -> Ratio a
fromIntegralToRatio a
x = a
x a -> a -> Ratio a
forall a. Integral a => a -> a -> Ratio a
% a
1
toFloat :: Rational -> Float
toFloat :: Rational -> Float
toFloat = Rational -> Float
forall a. Fractional a => Rational -> a
fromRational
toDouble :: Rational -> Double
toDouble :: Rational -> Double
toDouble = Rational -> Double
forall a. Fractional a => Rational -> a
fromRational