File: Number.hs

package info (click to toggle)
haskell-basement 0.0.16-3
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 1,048 kB
  • sloc: haskell: 11,336; ansic: 63; makefile: 5
file content (123 lines) | stat: -rw-r--r-- 4,062 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
{-# Language CPP #-}
module Basement.Numerical.Number
    ( IsIntegral(..)
    , IsNatural(..)
    ) where

import           Basement.Compat.Base
import           Basement.Compat.C.Types
import           Basement.Compat.Natural
import           Basement.Compat.NumLiteral
import           Data.Bits
import qualified Prelude

-- | Number literals, convertible through the generic Integer type.
--
-- all number are Enum'erable, meaning that you can move to
-- next element
class (Integral a, Eq a, Ord a) => IsIntegral a where
    {-# MINIMAL toInteger #-}
    toInteger :: a -> Integer

-- | Non Negative Number literals, convertible through the generic Natural type
class IsIntegral a => IsNatural a where
    {-# MINIMAL toNatural #-}
    toNatural :: a -> Natural

instance IsIntegral Integer where
    toInteger i = i
instance IsIntegral Int where
    toInteger i = Prelude.toInteger i
instance IsIntegral Int8 where
    toInteger i = Prelude.toInteger i
instance IsIntegral Int16 where
    toInteger i = Prelude.toInteger i
instance IsIntegral Int32 where
    toInteger i = Prelude.toInteger i
instance IsIntegral Int64 where
    toInteger i = Prelude.toInteger i
instance IsIntegral Natural where
    toInteger i = Prelude.toInteger i
instance IsIntegral Word where
    toInteger i = Prelude.toInteger i
instance IsIntegral Word8 where
    toInteger i = Prelude.toInteger i
instance IsIntegral Word16 where
    toInteger i = Prelude.toInteger i
instance IsIntegral Word32 where
    toInteger i = Prelude.toInteger i
instance IsIntegral Word64 where
    toInteger i = Prelude.toInteger i

instance IsIntegral CChar where
    toInteger i = Prelude.toInteger i
instance IsIntegral CSChar where
    toInteger i = Prelude.toInteger i
instance IsIntegral CUChar where
    toInteger i = Prelude.toInteger i
instance IsIntegral CShort where
    toInteger i = Prelude.toInteger i
instance IsIntegral CUShort where
    toInteger i = Prelude.toInteger i
instance IsIntegral CInt where
    toInteger i = Prelude.toInteger i
instance IsIntegral CUInt where
    toInteger i = Prelude.toInteger i
instance IsIntegral CLong where
    toInteger i = Prelude.toInteger i
instance IsIntegral CULong where
    toInteger i = Prelude.toInteger i
instance IsIntegral CPtrdiff where
    toInteger i = Prelude.toInteger i
instance IsIntegral CSize where
    toInteger i = Prelude.toInteger i
instance IsIntegral CWchar where
    toInteger i = Prelude.toInteger i
instance IsIntegral CSigAtomic where
    toInteger i = Prelude.toInteger i
instance IsIntegral CLLong where
    toInteger i = Prelude.toInteger i
instance IsIntegral CULLong where
    toInteger i = Prelude.toInteger i
#if MIN_VERSION_base(4,10,0)
instance IsIntegral CBool where
    toInteger i = Prelude.toInteger i
#endif
instance IsIntegral CIntPtr where
    toInteger i = Prelude.toInteger i
instance IsIntegral CUIntPtr where
    toInteger i = Prelude.toInteger i
instance IsIntegral CIntMax where
    toInteger i = Prelude.toInteger i
instance IsIntegral CUIntMax where
    toInteger i = Prelude.toInteger i

instance IsNatural Natural where
    toNatural i = i
instance IsNatural Word where
    toNatural i = Prelude.fromIntegral i
instance IsNatural Word8 where
    toNatural i = Prelude.fromIntegral i
instance IsNatural Word16 where
    toNatural i = Prelude.fromIntegral i
instance IsNatural Word32 where
    toNatural i = Prelude.fromIntegral i
instance IsNatural Word64 where
    toNatural i = Prelude.fromIntegral i

instance IsNatural CUChar where
    toNatural i = Prelude.fromIntegral i
instance IsNatural CUShort where
    toNatural i = Prelude.fromIntegral i
instance IsNatural CUInt where
    toNatural i = Prelude.fromIntegral i
instance IsNatural CULong where
    toNatural i = Prelude.fromIntegral i
instance IsNatural CSize where
    toNatural i = Prelude.fromIntegral i
instance IsNatural CULLong where
    toNatural i = Prelude.fromIntegral i
instance IsNatural CUIntPtr where
    toNatural i = Prelude.fromIntegral i
instance IsNatural CUIntMax where
    toNatural i = Prelude.fromIntegral i