module Prologue.Data.Num (module Prologue.Data.Num, module X) where


import Prelude
import Prelude as X ( Int, Integer, Float, Double, Rational, Word
                    , Num ((+), (*), abs, signum, fromInteger, negate, (-))
                    , Real (toRational)
                    , Integral (quot, rem, div, mod, quotRem, divMod, toInteger)
                    , Fractional ((/), recip, fromRational)
                    , Floating (pi, exp, log, sqrt, (**), logBase, sin, cos, tan, asin, acos, atan, sinh, cosh, tanh, asinh, acosh, atanh)
                    , RealFrac (properFraction, truncate, round, ceiling, floor)
                    , RealFloat (floatRadix, floatDigits, floatRange, decodeFloat, encodeFloat, exponent, significand, scaleFloat, isNaN, isInfinite, isDenormalized, isNegativeZero, isIEEE, atan2)
                    , subtract, even, odd, gcd, lcm, (^), (^^), fromIntegral, realToFrac
                    )

import Data.Int  as X (Int, Int8, Int16, Int32, Int64)
import Data.Word as X (Word, Word8, Word16, Word32, Word64)



isIntegral     :: RealFrac a =>        a -> Bool
isIntegralPrec :: RealFrac a => Int -> a -> Bool
isIntegral            = isIntegralPrec 10                                                      ; {-# INLINE isIntegral     #-}
isIntegralPrec prec a = round (10 ^ (fromIntegral prec) * (a - (fromIntegral $ round a))) == 0 ; {-# INLINE isIntegralPrec #-}