integer-gmp-1.1: Integer library based on GMP
Copyright(c) Herbert Valerio Riedel 2014
LicenseBSD3
Maintainerghc-devs@haskell.org
Stabilityprovisional
Portabilitynon-portable (GHC Extensions)
Safe HaskellNone
LanguageHaskell2010

GHC.Integer.GMP.Internals

Description

 
Synopsis

The Integer type

data Integer where Source #

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 IP and IN constructors are used to store a BigNat representing respectively the positive or the negative value magnitude.

Invariant: IP and IN are used iff value doesn't fit in IS

Bundled Patterns

pattern S# :: Int# -> Integer

Deprecated: Use IS constructor instead

pattern Jn# :: BigNat -> Integer

Deprecated: Use IN constructor instead

pattern Jp# :: BigNat -> Integer

Deprecated: Use IP constructor instead

Instances

Instances details
Eq Integer 
Instance details

Defined in GHC.Num.Integer

Ord Integer 
Instance details

Defined in GHC.Num.Integer

Show Integer

Since: base-2.1

Instance details

Defined in GHC.Show

isValidInteger# :: Integer -> Int# #

Deprecated: Use integerCheck# instead

Basic Integer operations

Additional Integer operations

gcdInteger :: Integer -> Integer -> Integer #

Deprecated: Use integerGcd instead

gcdExtInteger :: Integer -> Integer -> (# Integer, Integer #) #

Deprecated: Use integerGcde instead

lcmInteger :: Integer -> Integer -> Integer #

Deprecated: Use integerLcm instead

sqrInteger :: Integer -> Integer #

Deprecated: Use integerSqr instead

powModInteger :: Integer -> Integer -> Integer -> Integer #

Deprecated: Use integerPowMod# instead

recipModInteger :: Integer -> Integer -> Integer #

Deprecated: Use integerRecipMod# instead

Additional conversion operations to Integer

wordToNegInteger :: Word# -> Integer #

Deprecated: Use integerFromWordNeg# instead

bigNatToInteger :: BigNat -> Integer #

Deprecated: Use integerFromBigNat# instead

bigNatToNegInteger :: BigNat -> Integer #

Deprecated: Use integerFromBigNatNeg# instead

The BigNat type

data BigNat Source #

A lifted BigNat

Represented as an array of limbs (Word#) stored in little-endian order (Word# themselves use machine order).

Invariant (canonical representation): higher Word# is non-zero.

As a consequence, zero is represented with a WordArray# whose size is 0.

Constructors

BN# 

Fields

type GmpLimb = Word #

type GmpSize = Int #

type GmpSize# = Int# #

isValidBigNat# :: BigNat -> Int# #

Deprecated: Use bigNatCheck# instead

sizeofBigNat# :: BigNat -> GmpSize# #

Deprecated: Use bigNatSize# instead

zeroBigNat :: BigNat #

Deprecated: Use bigNatZero instead

oneBigNat :: BigNat #

Deprecated: Use bigNatOne instead

Conversions to/from BigNat

byteArrayToBigNat# :: ByteArray# -> GmpSize# -> BigNat #

Deprecated: Use bigNatFromWordArray instead

indexBigNat# :: BigNat -> GmpSize# -> GmpLimb# #

Deprecated: Use bigNatIndex# instead

BigNat arithmetic operations

plusBigNat :: BigNat -> BigNat -> BigNat #

Deprecated: Use bigNatAdd instead

plusBigNatWord :: BigNat -> GmpLimb# -> BigNat #

Deprecated: Use bigNatAddWord# instead

minusBigNat :: BigNat -> BigNat -> BigNat #

Deprecated: Use bigNatSub instead

minusBigNatWord :: BigNat -> GmpLimb# -> BigNat #

Deprecated: Use bigNatSubWord# instead

timesBigNat :: BigNat -> BigNat -> BigNat #

Deprecated: Use bigNatMul instead

timesBigNatWord :: BigNat -> GmpLimb# -> BigNat #

Deprecated: Use bigNatMulWord# instead

sqrBigNat :: BigNat -> BigNat #

Deprecated: Use bigNatSqr instead

quotRemBigNat :: BigNat -> BigNat -> (# BigNat, BigNat #) #

Deprecated: Use bigNatQuotRem# instead

quotRemBigNatWord :: BigNat -> GmpLimb# -> (# BigNat, GmpLimb# #) #

Deprecated: Use bigNatQuotRemWord# instead

quotBigNatWord :: BigNat -> GmpLimb# -> BigNat #

Deprecated: Use bigNatQuotWord# instead

quotBigNat :: BigNat -> BigNat -> BigNat #

Deprecated: Use bigNatQuot instead

remBigNat :: BigNat -> BigNat -> BigNat #

Deprecated: Use bigNatRem instead

remBigNatWord :: BigNat -> GmpLimb# -> Word# #

Deprecated: Use bigNatRemWord# instead

gcdBigNat :: BigNat -> BigNat -> BigNat #

Deprecated: Use bigNatGcd instead

gcdBigNatWord :: BigNat -> Word# -> Word# #

Deprecated: Use bigNatGcdWord# instead

BigNat logic operations

shiftRBigNat :: BigNat -> Int# -> BigNat #

Deprecated: Use bigNatShiftR# instead

shiftLBigNat :: BigNat -> Int# -> BigNat #

Deprecated: Use bigNatShiftL# instead

testBitBigNat :: BigNat -> Int# -> Bool #

Deprecated: Use bigNatTestBit# instead

clearBitBigNat :: BigNat -> Int# -> BigNat #

Deprecated: Use bigNatClearBit# instead

complementBitBigNat :: BigNat -> Int# -> BigNat #

Deprecated: Use bigNatComplementBit# instead

setBitBigNat :: BigNat -> Int# -> BigNat #

Deprecated: Use bigNatSetBit# instead

andBigNat :: BigNat -> BigNat -> BigNat #

Deprecated: Use bigNatAnd instead

xorBigNat :: BigNat -> BigNat -> BigNat #

Deprecated: Use bigNatXor instead

popCountBigNat :: BigNat -> Int# #

Deprecated: Use bigNatPopCount# instead

orBigNat :: BigNat -> BigNat -> BigNat #

Deprecated: Use bigNatOr instead

bitBigNat :: Int# -> BigNat #

Deprecated: Use bigNatBit# instead

BigNat comparison predicates

isZeroBigNat :: BigNat -> Bool #

Deprecated: Use bigNatIsZero instead

compareBigNatWord :: BigNat -> GmpLimb# -> Ordering #

Deprecated: Use bigNatCompareWord# instead

compareBigNat :: BigNat -> BigNat -> Ordering #

Deprecated: Use bigNatCompare instead

eqBigNatWord :: BigNat -> GmpLimb# -> Bool #

Deprecated: Use bigNatEqWord# instead

eqBigNatWord# :: BigNat -> GmpLimb# -> Int# #

Deprecated: Use bigNatEqWord# instead

eqBigNat :: BigNat -> BigNat -> Bool #

Deprecated: Use bigNatEq instead

eqBigNat# :: BigNat -> BigNat -> Int# #

Deprecated: Use bigNatEq# instead

gtBigNatWord# :: BigNat -> GmpLimb# -> Int# #

Deprecated: Use bigNatGtWord# instead

Import/export functions

Compute size of serialisation

sizeInBaseBigNat :: BigNat -> Int# -> Word# #

Deprecated: Use bigNatSizeInBase# instead

sizeInBaseInteger :: Integer -> Int# -> Word# #

Deprecated: Use integerSizeInBase# instead

sizeInBaseWord# :: Word# -> Int# -> Word# #

Deprecated: Use wordSizeInBase# instead

Export

exportBigNatToAddr :: BigNat -> Addr# -> Int# -> IO Word #

Deprecated: Use bigNatToAddr# instead

exportIntegerToAddr :: Integer -> Addr# -> Int# -> IO Word #

Deprecated: Use integerToAddr# instead

exportBigNatToMutableByteArray :: BigNat -> MutableByteArray# RealWorld -> Word# -> Int# -> IO Word #

Deprecated: Use bigNatToMutableByteArray# instead

exportIntegerToMutableByteArray :: Integer -> MutableByteArray# RealWorld -> Word# -> Int# -> IO Word #

Deprecated: Use integerToMutableByteArray# instead

Import

importBigNatFromAddr :: Addr# -> Word# -> Int# -> IO BigNat #

Deprecated: Use bigNatFromAddr# instead

importIntegerFromAddr :: Addr# -> Word# -> Int# -> IO Integer #

Deprecated: Use integerFromAddr# instead

importBigNatFromByteArray :: ByteArray# -> Word# -> Word# -> Int# -> BigNat #

Deprecated: Use bigNatFromByteArray# instead

importIntegerFromByteArray :: ByteArray# -> Word# -> Word# -> Int# -> Integer #

Deprecated: Use integerFromByteArray# instead