limp-0.3.2.1: src/Numeric/Limp/Rep/IntDouble.hs
-- | Fixed/floating precision number representation
module Numeric.Limp.Rep.IntDouble where
import Numeric.Limp.Rep.Rep
-- | A representation that uses native 64-bit ints and 64-bit doubles.
-- Really, this should be 32-bit ints.
data IntDouble
instance Rep IntDouble where
-- | Automatically defer numeric operations to the native int.
newtype Z IntDouble = Z Int
deriving (Ord,Eq,Integral,Real,Num,Enum)
newtype R IntDouble = R Double
deriving (Ord,Eq,Num,Enum,Fractional,Real,RealFrac)
-- | Define show manually, so we can strip out the "Z" and "R" prefixes.
instance Show (Z IntDouble) where
show (Z i) = show i
instance Show (R IntDouble) where
show (R i) = show i
-- | Convert a wrapped (R IntDouble) to an actual Double.
unwrapR :: R IntDouble -> Double
unwrapR (R d) = d