{-# Language CPP #-}
{-# LANGUAGE TypeSynonymInstances #-}
{-# LANGUAGE FlexibleInstances #-}
module Basement.Compat.NumLiteral
( Integral(..)
, Fractional(..)
, HasNegation(..)
) where
import Prelude (Int, Integer, Rational, Float, Double)
import Data.Word (Word8, Word16, Word32, Word64, Word)
import Data.Int (Int8, Int16, Int32, Int64)
import Basement.Compat.C.Types
import qualified Prelude
import Basement.Compat.Natural
import Foreign.Ptr (IntPtr)
class Integral a where
fromInteger :: Integer -> a
class Fractional a where
fromRational :: Rational -> a
class HasNegation a where
negate :: a -> a
instance Integral Integer where
fromInteger a = a
instance Integral Natural where
fromInteger a = Prelude.fromInteger a
instance Integral Int where
fromInteger a = Prelude.fromInteger a
instance Integral Word where
fromInteger a = Prelude.fromInteger a
instance Integral Word8 where
fromInteger a = Prelude.fromInteger a
instance Integral Word16 where
fromInteger a = Prelude.fromInteger a
instance Integral Word32 where
fromInteger a = Prelude.fromInteger a
instance Integral Word64 where
fromInteger a = Prelude.fromInteger a
instance Integral Int8 where
fromInteger a = Prelude.fromInteger a
instance Integral Int16 where
fromInteger a = Prelude.fromInteger a
instance Integral Int32 where
fromInteger a = Prelude.fromInteger a
instance Integral Int64 where
fromInteger a = Prelude.fromInteger a
instance Integral IntPtr where
fromInteger a = Prelude.fromInteger a
instance Integral Float where
fromInteger a = Prelude.fromInteger a
instance Integral Double where
fromInteger a = Prelude.fromInteger a
instance Integral CChar where
fromInteger a = Prelude.fromInteger a
instance Integral CSChar where
fromInteger a = Prelude.fromInteger a
instance Integral CUChar where
fromInteger a = Prelude.fromInteger a
instance Integral CShort where
fromInteger a = Prelude.fromInteger a
instance Integral CUShort where
fromInteger a = Prelude.fromInteger a
instance Integral CInt where
fromInteger a = Prelude.fromInteger a
instance Integral CUInt where
fromInteger a = Prelude.fromInteger a
instance Integral CLong where
fromInteger a = Prelude.fromInteger a
instance Integral CULong where
fromInteger a = Prelude.fromInteger a
instance Integral CPtrdiff where
fromInteger a = Prelude.fromInteger a
instance Integral CSize where
fromInteger a = Prelude.fromInteger a
instance Integral CWchar where
fromInteger a = Prelude.fromInteger a
instance Integral CSigAtomic where
fromInteger a = Prelude.fromInteger a
instance Integral CLLong where
fromInteger a = Prelude.fromInteger a
instance Integral CULLong where
fromInteger a = Prelude.fromInteger a
#if MIN_VERSION_base(4, 10, 0)
instance Integral CBool where
fromInteger a = Prelude.fromInteger a
#endif
instance Integral CIntPtr where
fromInteger a = Prelude.fromInteger a
instance Integral CUIntPtr where
fromInteger a = Prelude.fromInteger a
instance Integral CIntMax where
fromInteger a = Prelude.fromInteger a
instance Integral CUIntMax where
fromInteger a = Prelude.fromInteger a
instance Integral CClock where
fromInteger a = Prelude.fromInteger a
instance Integral CTime where
fromInteger a = Prelude.fromInteger a
instance Integral CUSeconds where
fromInteger a = Prelude.fromInteger a
instance Integral CSUSeconds where
fromInteger a = Prelude.fromInteger a
instance Integral COff where
fromInteger a = Prelude.fromInteger a
instance Integral CFloat where
fromInteger a = Prelude.fromInteger a
instance Integral CDouble where
fromInteger a = Prelude.fromInteger a
instance HasNegation Integer where
negate = Prelude.negate
instance HasNegation Int where
negate = Prelude.negate
instance HasNegation Int8 where
negate = Prelude.negate
instance HasNegation Int16 where
negate = Prelude.negate
instance HasNegation Int32 where
negate = Prelude.negate
instance HasNegation Int64 where
negate = Prelude.negate
instance HasNegation Word where
negate = Prelude.negate
instance HasNegation Word8 where
negate = Prelude.negate
instance HasNegation Word16 where
negate = Prelude.negate
instance HasNegation Word32 where
negate = Prelude.negate
instance HasNegation Word64 where
negate = Prelude.negate
instance HasNegation Float where
negate = Prelude.negate
instance HasNegation Double where
negate = Prelude.negate
instance HasNegation CChar where
negate = Prelude.negate
instance HasNegation CSChar where
negate = Prelude.negate
instance HasNegation CShort where
negate = Prelude.negate
instance HasNegation CInt where
negate = Prelude.negate
instance HasNegation CLong where
negate = Prelude.negate
instance HasNegation CPtrdiff where
negate = Prelude.negate
instance HasNegation CWchar where
negate = Prelude.negate
instance HasNegation CLLong where
negate = Prelude.negate
instance HasNegation CIntMax where
negate = Prelude.negate
instance HasNegation CFloat where
negate = Prelude.negate
instance HasNegation CDouble where
negate = Prelude.negate
instance Fractional Rational where
fromRational a = Prelude.fromRational a
instance Fractional Float where
fromRational a = Prelude.fromRational a
instance Fractional Double where
fromRational a = Prelude.fromRational a
instance Fractional CFloat where
fromRational a = Prelude.fromRational a
instance Fractional CDouble where
fromRational a = Prelude.fromRational a