GHC.Integer

integer-gmp-1.0.2.0: Integer library based on GMP

Copyright | (c) Herbert Valerio Riedel 2014
License | BSD3
Maintainer | ghc-devs@haskell.org
Stability | provisional
Portability | non-portable (GHC Extensions)
Safe Haskell | None
Language | Haskell2010

GHC.Integer

Contents

- Construct `Integer`s
- Conversion to other integral types
- Helpers for `RealFloat` type-class operations
- Arithmetic operations
- Comparison predicates
  - `Int#`-boolean valued versions of comparison predicates
- Bit-operations
- Hashing

Description

The `Integer` type.

This module exposes the portable `Integer` API. See GHC.Integer.GMP.Internals for the `integer-gmp`-specific internal representation of `Integer` as well as optimized GMP-specific operations.

Synopsis

- data Integer
- mkInteger :: Bool -> [Int] -> Integer
- smallInteger :: Int# -> Integer
- wordToInteger :: Word# -> Integer
- integerToWord :: Integer -> Word#
- integerToInt :: Integer -> Int#
- encodeFloatInteger :: Integer -> Int# -> Float#
- floatFromInteger :: Integer -> Float#
- encodeDoubleInteger :: Integer -> Int# -> Double#
- decodeDoubleInteger :: Double# -> (# Integer, Int# #)
- doubleFromInteger :: Integer -> Double#
- plusInteger :: Integer -> Integer -> Integer
- minusInteger :: Integer -> Integer -> Integer
- timesInteger :: Integer -> Integer -> Integer
- negateInteger :: Integer -> Integer
- absInteger :: Integer -> Integer
- signumInteger :: Integer -> Integer
- divModInteger :: Integer -> Integer -> (# Integer, Integer #)
- divInteger :: Integer -> Integer -> Integer
- modInteger :: Integer -> Integer -> Integer
- quotRemInteger :: Integer -> Integer -> (# Integer, Integer #)
- quotInteger :: Integer -> Integer -> Integer
- remInteger :: Integer -> Integer -> Integer
- eqInteger :: Integer -> Integer -> Bool
- neqInteger :: Integer -> Integer -> Bool
- leInteger :: Integer -> Integer -> Bool
- gtInteger :: Integer -> Integer -> Bool
- ltInteger :: Integer -> Integer -> Bool
- geInteger :: Integer -> Integer -> Bool
- compareInteger :: Integer -> Integer -> Ordering
- eqInteger# :: Integer -> Integer -> Int#
- neqInteger# :: Integer -> Integer -> Int#
- leInteger# :: Integer -> Integer -> Int#
- gtInteger# :: Integer -> Integer -> Int#
- ltInteger# :: Integer -> Integer -> Int#
- geInteger# :: Integer -> Integer -> Int#
- andInteger :: Integer -> Integer -> Integer
- orInteger :: Integer -> Integer -> Integer
- xorInteger :: Integer -> Integer -> Integer
- complementInteger :: Integer -> Integer
- shiftLInteger :: Integer -> Int# -> Integer
- shiftRInteger :: Integer -> Int# -> Integer
- testBitInteger :: Integer -> Int# -> Bool
- popCountInteger :: Integer -> Int#
- bitInteger :: Int# -> Integer
- hashInteger :: Integer -> Int#

# Documentation

data Integer Source #

Arbitrary precision integers. In contrast with fixed-size integral types such as `Int`, the `Integer` type represents the entire infinite range of integers.

For more information about this type's representation, see the comments in its implementation.

#### Instances

Instances details

Eq Integer # |
Instance details Defined in GHC.Integer.Type Methods (==) :: Integer -> Integer -> Bool Source # (/=) :: Integer -> Integer -> Bool Source #
Ord Integer # |
Instance details Defined in GHC.Integer.Type Methods compare :: Integer -> Integer -> Ordering Source # (<) :: Integer -> Integer -> Bool Source # (<=) :: Integer -> Integer -> Bool Source # (>) :: Integer -> Integer -> Bool Source # (>=) :: Integer -> Integer -> Bool Source # max :: Integer -> Integer -> Integer Source # min :: Integer -> Integer -> Integer Source #

# Construct `Integer`s

mkInteger Source #

Arguments

:: Bool | sign of integer (`True` if non-negative)
-> [Int] | absolute value expressed in 31 bit chunks, least significant first (ideally these would be machine-word `Word`s rather than 31-bit truncated `Int`s)
-> Integer |

Construct `Integer` value from list of `Int`s.

This function is used by GHC for constructing `Integer` literals.

smallInteger :: Int# -> Integer Source #

Should rather be called `intToInteger`

wordToInteger :: Word# -> Integer Source #

# Conversion to other integral types

integerToWord :: Integer -> Word# Source #

integerToInt :: Integer -> Int# Source #

Truncates `Integer` to least-significant `Int#`

# Helpers for `RealFloat` type-class operations

encodeFloatInteger :: Integer -> Int# -> Float# Source #

floatFromInteger :: Integer -> Float# Source #

encodeDoubleInteger :: Integer -> Int# -> Double# Source #

decodeDoubleInteger :: Double# -> (# Integer, Int# #) Source #

doubleFromInteger :: Integer -> Double# Source #

# Arithmetic operations

plusInteger :: Integer -> Integer -> Integer Source #

Add two `Integer`s

minusInteger :: Integer -> Integer -> Integer Source #

Subtract one `Integer` from another.

timesInteger :: Integer -> Integer -> Integer Source #

Multiply two `Integer`s

negateInteger :: Integer -> Integer Source #

Negate `Integer`

absInteger :: Integer -> Integer Source #

Compute absolute value of an `Integer`

signumInteger :: Integer -> Integer Source #

Return `-1`, `0`, and `1` depending on whether argument is negative, zero, or positive, respectively

divModInteger :: Integer -> Integer -> (# Integer, Integer #) Source #

Simultaneous `divInteger` and `modInteger`.

Divisor must be non-zero otherwise the GHC runtime will terminate with a division-by-zero fault.

divInteger :: Integer -> Integer -> Integer Source #

modInteger :: Integer -> Integer -> Integer Source #

quotRemInteger :: Integer -> Integer -> (# Integer, Integer #) Source #

Simultaneous `quotInteger` and `remInteger`.

Divisor must be non-zero otherwise the GHC runtime will terminate with a division-by-zero fault.

quotInteger :: Integer -> Integer -> Integer Source #

remInteger :: Integer -> Integer -> Integer Source #

# Comparison predicates

eqInteger :: Integer -> Integer -> Bool Source #

neqInteger :: Integer -> Integer -> Bool Source #

Not-equal predicate.

leInteger :: Integer -> Integer -> Bool Source #

gtInteger :: Integer -> Integer -> Bool Source #

ltInteger :: Integer -> Integer -> Bool Source #

geInteger :: Integer -> Integer -> Bool Source #

compareInteger :: Integer -> Integer -> Ordering Source #

## `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 #

Bitwise AND operation

orInteger :: Integer -> Integer -> Integer Source #

Bitwise OR operation

xorInteger :: Integer -> Integer -> Integer Source #

Bitwise XOR operation

complementInteger :: Integer -> Integer Source #

Bitwise `NOT` operation

shiftLInteger :: Integer -> Int# -> Integer Source #

Shift-left operation

Even though the shift-amount is expressed as `Int#`, the result is undefined for negative shift-amounts.

shiftRInteger :: Integer -> Int# -> Integer Source #

Arithmetic shift-right operation

Even though the shift-amount is expressed as `Int#`, the result is undefined for negative shift-amounts.

testBitInteger :: Integer -> Int# -> Bool Source #

Test if n-th bit is set.

popCountInteger :: Integer -> Int# Source #

Count number of set bits. For negative arguments returns negative population count of negated argument.

bitInteger :: Int# -> Integer Source #

`Integer` for which only n-th bit is set. Undefined behaviour for negative n values.

# Hashing

hashInteger :: Integer -> Int# Source #