1{-# Language CPP #-} 2module Basement.Numerical.Number 3 ( IsIntegral(..) 4 , IsNatural(..) 5 ) where 6 7import Basement.Compat.Base 8import Basement.Compat.C.Types 9import Basement.Compat.Natural 10import Basement.Compat.NumLiteral 11import Data.Bits 12import qualified Prelude 13 14-- | Number literals, convertible through the generic Integer type. 15-- 16-- all number are Enum'erable, meaning that you can move to 17-- next element 18class (Integral a, Eq a, Ord a) => IsIntegral a where 19 {-# MINIMAL toInteger #-} 20 toInteger :: a -> Integer 21 22-- | Non Negative Number literals, convertible through the generic Natural type 23class IsIntegral a => IsNatural a where 24 {-# MINIMAL toNatural #-} 25 toNatural :: a -> Natural 26 27instance IsIntegral Integer where 28 toInteger i = i 29instance IsIntegral Int where 30 toInteger i = Prelude.toInteger i 31instance IsIntegral Int8 where 32 toInteger i = Prelude.toInteger i 33instance IsIntegral Int16 where 34 toInteger i = Prelude.toInteger i 35instance IsIntegral Int32 where 36 toInteger i = Prelude.toInteger i 37instance IsIntegral Int64 where 38 toInteger i = Prelude.toInteger i 39instance IsIntegral Natural where 40 toInteger i = Prelude.toInteger i 41instance IsIntegral Word where 42 toInteger i = Prelude.toInteger i 43instance IsIntegral Word8 where 44 toInteger i = Prelude.toInteger i 45instance IsIntegral Word16 where 46 toInteger i = Prelude.toInteger i 47instance IsIntegral Word32 where 48 toInteger i = Prelude.toInteger i 49instance IsIntegral Word64 where 50 toInteger i = Prelude.toInteger i 51 52instance IsIntegral CChar where 53 toInteger i = Prelude.toInteger i 54instance IsIntegral CSChar where 55 toInteger i = Prelude.toInteger i 56instance IsIntegral CUChar where 57 toInteger i = Prelude.toInteger i 58instance IsIntegral CShort where 59 toInteger i = Prelude.toInteger i 60instance IsIntegral CUShort where 61 toInteger i = Prelude.toInteger i 62instance IsIntegral CInt where 63 toInteger i = Prelude.toInteger i 64instance IsIntegral CUInt where 65 toInteger i = Prelude.toInteger i 66instance IsIntegral CLong where 67 toInteger i = Prelude.toInteger i 68instance IsIntegral CULong where 69 toInteger i = Prelude.toInteger i 70instance IsIntegral CPtrdiff where 71 toInteger i = Prelude.toInteger i 72instance IsIntegral CSize where 73 toInteger i = Prelude.toInteger i 74instance IsIntegral CWchar where 75 toInteger i = Prelude.toInteger i 76instance IsIntegral CSigAtomic where 77 toInteger i = Prelude.toInteger i 78instance IsIntegral CLLong where 79 toInteger i = Prelude.toInteger i 80instance IsIntegral CULLong where 81 toInteger i = Prelude.toInteger i 82#if MIN_VERSION_base(4,10,0) 83instance IsIntegral CBool where 84 toInteger i = Prelude.toInteger i 85#endif 86instance IsIntegral CIntPtr where 87 toInteger i = Prelude.toInteger i 88instance IsIntegral CUIntPtr where 89 toInteger i = Prelude.toInteger i 90instance IsIntegral CIntMax where 91 toInteger i = Prelude.toInteger i 92instance IsIntegral CUIntMax where 93 toInteger i = Prelude.toInteger i 94 95instance IsNatural Natural where 96 toNatural i = i 97instance IsNatural Word where 98 toNatural i = Prelude.fromIntegral i 99instance IsNatural Word8 where 100 toNatural i = Prelude.fromIntegral i 101instance IsNatural Word16 where 102 toNatural i = Prelude.fromIntegral i 103instance IsNatural Word32 where 104 toNatural i = Prelude.fromIntegral i 105instance IsNatural Word64 where 106 toNatural i = Prelude.fromIntegral i 107 108instance IsNatural CUChar where 109 toNatural i = Prelude.fromIntegral i 110instance IsNatural CUShort where 111 toNatural i = Prelude.fromIntegral i 112instance IsNatural CUInt where 113 toNatural i = Prelude.fromIntegral i 114instance IsNatural CULong where 115 toNatural i = Prelude.fromIntegral i 116instance IsNatural CSize where 117 toNatural i = Prelude.fromIntegral i 118instance IsNatural CULLong where 119 toNatural i = Prelude.fromIntegral i 120instance IsNatural CUIntPtr where 121 toNatural i = Prelude.fromIntegral i 122instance IsNatural CUIntMax where 123 toNatural i = Prelude.fromIntegral i 124