On this page
GHC.Integer
Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Description
Compatibility module for pre ghc-bignum code.
Arbitrary precision integers. In contrast with fixed-size integral types such as Int
, the Integer
type represents the entire infinite range of integers.
Integers are stored in a kind of sign-magnitude form, hence do not expect two's complement form when using bit operations.
If the value is small (fit into an Int
), IS
constructor is used. Otherwise Integer
and IN
constructors are used to store a BigNat
representing respectively the positive or the negative value magnitude.
Invariant: Integer
and IN
are used iff value doesn't fit in IS
Instances
Construct Integers
smallInteger :: Int# -> Integer Source
wordToInteger :: Word# -> Integer Source
Conversion to other integral types
integerToWord :: Integer -> Word# Source
integerToInt :: Integer -> Int# Source
Helpers for RealFloat type-class operations
encodeFloatInteger :: Integer -> Int# -> Float# Source
encodeDoubleInteger :: Integer -> Int# -> Double# Source
decodeDoubleInteger :: Double# -> (# Integer, Int# #) Source
Arithmetic operations
plusInteger :: Integer -> Integer -> Integer Source
Used to implement (+)
for the Num
typeclass. This gives the sum of two integers.
Example
>>> plusInteger 3 2
5
>>> (+) 3 2
5
minusInteger :: Integer -> Integer -> Integer Source
Used to implement (-)
for the Num
typeclass. This gives the difference of two integers.
Example
>>> minusInteger 3 2
1
>>> (-) 3 2
1
timesInteger :: Integer -> Integer -> Integer Source
Used to implement (*)
for the Num
typeclass. This gives the product of two integers.
Example
>>> timesInteger 3 2
6
>>> (*) 3 2
6
negateInteger :: Integer -> Integer Source
Used to implement negate
for the Num
typeclass. This changes the sign of whatever integer is passed into it.
Example
>>> negateInteger (-6)
6
>>> negate (-6)
6
absInteger :: Integer -> Integer Source
Used to implement abs
for the Num
typeclass. This gives the absolute value of whatever integer is passed into it.
Example
>>> absInteger (-6)
6
>>> abs (-6)
6
signumInteger :: Integer -> Integer Source
Used to implement signum
for the Num
typeclass. This gives 1 for a positive integer, and -1 for a negative integer.
Example
>>> signumInteger 5
1
>>> signum 5
1
divModInteger :: Integer -> Integer -> (# Integer, Integer #) Source
Used to implement divMod
for the Integral
typeclass. This gives a tuple equivalent to
(div x y, mod x y)
Example
>>> divModInteger 10 2
(5,0)
>>> divMod 10 2
(5,0)
divInteger :: Integer -> Integer -> Integer Source
Used to implement div
for the Integral
typeclass. This performs integer division on its two parameters, truncated towards negative infinity.
Example
>>> 10 `divInteger` 2
5
>>> 10 `div` 2
modInteger :: Integer -> Integer -> Integer Source
Used to implement mod
for the Integral
typeclass. This performs the modulo operation, satisfying
((x `div` y) * y) + (x `mod` y) == x
Example
>>> 7 `modInteger` 3
1
>>> 7 `mod` 3
1
quotRemInteger :: Integer -> Integer -> (# Integer, Integer #) Source
Used to implement quotRem
for the Integral
typeclass. This gives a tuple equivalent to
(quot x y, mod x y)
Example
>>> quotRemInteger 10 2
(5,0)
>>> quotRem 10 2
(5,0)
quotInteger :: Integer -> Integer -> Integer Source
Used to implement quot
for the Integral
typeclass. This performs integer division on its two parameters, truncated towards zero.
Example
>>> quotInteger 10 2
5
>>> quot 10 2
5
remInteger :: Integer -> Integer -> Integer Source
Used to implement rem
for the Integral
typeclass. This gives the remainder after integer division of its two parameters, satisfying
((x `quot` y) * y) + (x `rem` y) == x
Example
>>> remInteger 3 2
1
>>> rem 3 2
1
Comparison predicates
eqInteger :: Integer -> Integer -> Bool Source
Used to implement (==)
for the Eq
typeclass. Outputs True
if two integers are equal to each other.
Example
>>> 6 `eqInteger` 6
True
>>> 6 == 6
True
neqInteger :: Integer -> Integer -> Bool Source
Used to implement (/=)
for the Eq
typeclass. Outputs True
if two integers are not equal to each other.
Example
>>> 6 `neqInteger` 7
True
>>> 6 /= 7
True
leInteger :: Integer -> Integer -> Bool Source
Used to implement (<=)
for the Ord
typeclass. Outputs True
if the first argument is less than or equal to the second.
Example
>>> 3 `leInteger` 5
True
>>> 3 <= 5
True
gtInteger :: Integer -> Integer -> Bool Source
Used to implement (>)
for the Ord
typeclass. Outputs True
if the first argument is greater than the second.
Example
>>> 5 `gtInteger` 3
True
>>> 5 > 3
True
ltInteger :: Integer -> Integer -> Bool Source
Used to implement (<)
for the Ord
typeclass. Outputs True
if the first argument is less than the second.
Example
>>> 3 `ltInteger` 5
True
>>> 3 < 5
True
geInteger :: Integer -> Integer -> Bool Source
Used to implement (>=)
for the Ord
typeclass. Outputs True
if the first argument is greater than or equal to the second.
Example
>>> 5 `geInteger` 3
True
>>> 5 >= 3
True
compareInteger :: Integer -> Integer -> Ordering Source
Used to implement compare
for the Integral
typeclass. This takes two integers, and outputs whether the first is less than, equal to, or greater than the second.
Example
>>> compareInteger 2 10
LT
>>> compare 2 10
LT
Int#
-boolean valued versions of comparison predicates
These operations return 0#
and 1#
instead of False
and True
respectively. See PrimBool wiki-page for more details
eqInteger# :: Integer -> Integer -> Int# Source
neqInteger# :: Integer -> Integer -> Int# Source
leInteger# :: Integer -> Integer -> Int# Source
gtInteger# :: Integer -> Integer -> Int# Source
ltInteger# :: Integer -> Integer -> Int# Source
geInteger# :: Integer -> Integer -> Int# Source
Bit-operations
andInteger :: Integer -> Integer -> Integer Source
orInteger :: Integer -> Integer -> Integer Source
xorInteger :: Integer -> Integer -> Integer Source
complementInteger :: Integer -> Integer Source
shiftLInteger :: Integer -> Int# -> Integer Source
shiftRInteger :: Integer -> Int# -> Integer Source
testBitInteger :: Integer -> Int# -> Bool Source
popCountInteger :: Integer -> Int# Source
bitInteger :: Int# -> Integer Source
Hashing
hashInteger :: Integer -> Int# Source
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/9.4.2/docs/libraries/base-4.17.0.0/GHC-Integer.html