{-# OPTIONS_GHC -fno-warn-orphans #-}
module BishBosh.Data.Ratio(
) where
import qualified Data.Ratio
import qualified Text.XML.HXT.Arrow.Pickle as HXT
round' :: RealFrac r => r -> Rational
round' :: r -> Rational
round' = (r -> r -> Rational
forall a. RealFrac a => a -> a -> Rational
`Data.Ratio.approxRational` r
doublePrecisionEpsilon) where
doublePrecisionEpsilon :: r
doublePrecisionEpsilon = r -> r
forall a. Fractional a => a -> a
recip r
2 r -> Int -> r
forall a b. (Num a, Integral b) => a -> b -> a
^ Double -> Int
forall a. RealFloat a => a -> Int
floatDigits (Double
forall a. HasCallStack => a
undefined :: Double)
instance Integral i => HXT.XmlPickler (Data.Ratio.Ratio i) where
xpickle :: PU (Ratio i)
xpickle = (Double -> Ratio i, Ratio i -> Double) -> PU Double -> PU (Ratio i)
forall a b. (a -> b, b -> a) -> PU a -> PU b
HXT.xpWrap (
Rational -> Ratio i
forall a. Fractional a => Rational -> a
fromRational (Rational -> Ratio i) -> (Double -> Rational) -> Double -> Ratio i
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Double -> Rational
forall r. RealFrac r => r -> Rational
round',
\Ratio i
x -> Ratio i -> Double
forall a b. (Real a, Fractional b) => a -> b
realToFrac Ratio i
x :: Double
) PU Double
forall a. (Read a, Show a) => PU a
HXT.xpPrim