Modulebase-compat-0.14.1Haskell2010
Data.Bits.Compat
- 4 types
- 2 classes
- 20 values
- Packagebase-compat-0.14.1
- Exports26
- LanguageHaskell2010
- LicenceMIT
- SourceBits.hs
Default implementation for testBit.
Note that: testBitDefault x i = (x .&. bit i) /= 0
Default implementation for popCount.
This implementation is intentionally naive. Instances are expected to provide an optimized implementation for their size.
Infix version of xor.
Infix version of shiftR.
Infix version of shiftL.
Infix version of unsafeShiftR.
Infix version of unsafeShiftL.
Attempt to convert an Integral type a to an Integral type b using
the size of the types as measured by Bits methods.
A simpler version of this function is:
toIntegral :: (Integral a, Integral b) => a -> Maybe b
toIntegral x
| toInteger x == toInteger y = Just y
| otherwise = Nothing
where
y = fromIntegral xThis version requires going through Integer, which can be inefficient.
However, toIntegralSized is optimized to allow GHC to statically determine
the relative type sizes (as measured by bitSizeMaybe and isSigned) and
avoid going through Integer for many types. (The implementation uses
fromIntegral, which is itself optimized with rules for base types but may
go through Integer for some type pairs.)
A more concise version of complement zeroBits.
complement (zeroBits :: Word) == (oneBits :: Word)True
complement (oneBits :: Word) == (zeroBits :: Word)True
Note
The constraint on oneBits is arguably too strong. However, as some types
(such as Natural) have undefined complement, this is the only safe
choice.
The Bits class defines bitwise operations over integral types.
Bits are numbered from 0 with bit 0 being the least significant bit.
Methods
(.&.) :: a -> a -> ainfixl 7Bitwise "and"
(.|.) :: a -> a -> ainfixl 5Bitwise "or"
xor :: a -> a -> ainfixl 6Bitwise "xor"
complement :: a -> aReverse all the bits in the argument
shift :: a -> Int -> ainfixl 8shift x ishiftsxleft byibits ifiis positive, or right by-ibits otherwise. Right shifts perform sign extension on signed number types; i.e. they fill the top bits with 1 if thexis negative and with 0 otherwise.An instance can define either this unified shift or shiftL and shiftR, depending on which is more convenient for the type in question.
rotate :: a -> Int -> ainfixl 8zeroBits :: azeroBits is the value with all bits unset.
The following laws ought to hold (for all valid bit indices
n):clearBit zeroBits n == zeroBitssetBit zeroBits n == bit ntestBit zeroBits n == FalsepopCount zeroBits == 0
This method uses
clearBit (bit 0) 0as its default implementation (which ought to be equivalent to zeroBits for types which possess a 0th bit).bit :: Int -> asetBit :: a -> Int -> ax `setBit` iis the same asx .|. bit iclearBit :: a -> Int -> ax `clearBit` iis the same asx .&. complement (bit i)complementBit :: a -> Int -> ax `complementBit` iis the same asx `xor` bit itestBit :: a -> Int -> Boolx `testBit` iis the same asx .&. bit n /= 0In other words it returns True if the bit at offset @n is set.
Can be implemented using
testBitDefaultifais also an instance of Num.bitSizeMaybe :: a -> Maybe IntReturn the number of bits in the type of the argument. The actual value of the argument is ignored. Returns Nothing for types that do not have a fixed bitsize, like Integer.
bitSize :: a -> IntReturn the number of bits in the type of the argument. The actual value of the argument is ignored. The function bitSize is undefined for types that do not have a fixed bitsize, like Integer.
Default implementation based upon bitSizeMaybe provided since 4.12.0.0.
isSigned :: a -> BoolReturn True if the argument is a signed type. The actual value of the argument is ignored
shiftL :: a -> Int -> ainfixl 8unsafeShiftL :: a -> Int -> ashiftR :: a -> Int -> ainfixl 8Shift the first argument right by the specified number of bits. The result is undefined for negative shift amounts and shift amounts greater or equal to the bitSize. Some instances may throw an Overflow exception if given a negative input.
Right shifts perform sign extension on signed number types; i.e. they fill the top bits with 1 if the
xis negative and with 0 otherwise.An instance can define either this and shiftL or the unified shift, depending on which is more convenient for the type in question.
unsafeShiftR :: a -> Int -> aShift the first argument right by the specified number of bits, which must be non-negative and smaller than the number of bits in the type.
Right shifts perform sign extension on signed number types; i.e. they fill the top bits with 1 if the
xis negative and with 0 otherwise.Defaults to shiftR unless defined explicitly by an instance.
rotateL :: a -> Int -> ainfixl 8rotateR :: a -> Int -> ainfixl 8popCount :: a -> IntReturn the number of set bits in the argument. This number is known as the population count or the Hamming weight.
Can be implemented using
popCountDefaultifais also an instance of Num.
Instances68Bits, …
Bits IntegerDefined in ghc-internal-9.1003.0 · GHC.Internal.BitsBits NaturalDefined in ghc-internal-9.1003.0 · GHC.Internal.BitsBits EventTypeDefined in ghc-internal-9.1003.0 · GHC.Internal.Event.EPollBits EventDefined in ghc-internal-9.1003.0 · GHC.Internal.Event.PollBits CBoolDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesBits CCharDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesBits CIntDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesBits CIntMaxDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesBits CIntPtrDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesBits CLLongDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesBits CLongDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesBits CPtrdiffDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesBits CSCharDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesBits CShortDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesBits CSigAtomicDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesBits CSizeDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesBits CUCharDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesBits CUIntDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesBits CUIntMaxDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesBits CUIntPtrDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesBits CULLongDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesBits CULongDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesBits CUShortDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesBits CWcharDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesBits IntPtrDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.PtrBits WordPtrDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.PtrBits Int16Defined in ghc-internal-9.1003.0 · GHC.Internal.IntBits Int32Defined in ghc-internal-9.1003.0 · GHC.Internal.IntBits Int64Defined in ghc-internal-9.1003.0 · GHC.Internal.IntBits Int8Defined in ghc-internal-9.1003.0 · GHC.Internal.IntBits CBlkCntDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesBits CBlkSizeDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesBits CClockIdDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesBits CDevDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesBits CFsBlkCntDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesBits CFsFilCntDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesBits CGidDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesBits CIdDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesBits CInoDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesBits CKeyDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesBits CModeDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesBits CNfdsDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesBits CNlinkDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesBits COffDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesBits CPidDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesBits CRLimDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesBits CSocklenDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesBits CSsizeDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesBits CTcflagDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesBits CUidDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesBits FdDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesBits Word16Defined in ghc-internal-9.1003.0 · GHC.Internal.WordBits Word32Defined in ghc-internal-9.1003.0 · GHC.Internal.WordBits Word64Defined in ghc-internal-9.1003.0 · GHC.Internal.WordBits Word8Defined in ghc-internal-9.1003.0 · GHC.Internal.WordBits BoolDefined in ghc-internal-9.1003.0 · GHC.Internal.BitsInterpret Bool as 1-bit bit-field
Bits IntDefined in ghc-internal-9.1003.0 · GHC.Internal.BitsBits WordDefined in ghc-internal-9.1003.0 · GHC.Internal.BitsBits CAttributesDefined in unix-2.8.7.0 · System.Posix.Files.CommonBits StatxFlagsDefined in unix-2.8.7.0 · System.Posix.Files.CommonBits StatxMaskDefined in unix-2.8.7.0 · System.Posix.Files.CommonBits a => Bits (And a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsBits a => Bits (Iff a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsBits a => Bits (Ior a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsBits a => Bits (Xor a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsBits a => Bits (Identity a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.IdentityBits a => Bits (Down a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.OrdBits a => Bits (Const a b)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.Const
The FiniteBits class denotes types with a finite, fixed number of bits.
Methods
finiteBitSize :: b -> IntReturn the number of bits in the type of the argument. The actual value of the argument is ignored. Moreover, finiteBitSize is total, in contrast to the deprecated bitSize function it replaces.
finiteBitSize = bitSize bitSizeMaybe = Just . finiteBitSizecountLeadingZeros :: b -> IntCount number of zero bits preceding the most significant set bit.
countLeadingZeros (zeroBits :: a) = finiteBitSize (zeroBits :: a)countLeadingZeros can be used to compute log base 2 via
logBase2 x = finiteBitSize x - 1 - countLeadingZeros xNote: The default implementation for this method is intentionally naive. However, the instances provided for the primitive integral types are implemented using CPU specific machine instructions.
countTrailingZeros :: b -> IntCount number of zero bits following the least significant set bit.
countTrailingZeros (zeroBits :: a) = finiteBitSize (zeroBits :: a) countTrailingZeros . negate = countTrailingZerosThe related find-first-set operation can be expressed in terms of countTrailingZeros as follows
findFirstSet x = 1 + countTrailingZeros xNote: The default implementation for this method is intentionally naive. However, the instances provided for the primitive integral types are implemented using CPU specific machine instructions.
Instances63FiniteBits, …
FiniteBits EventTypeDefined in ghc-internal-9.1003.0 · GHC.Internal.Event.EPollFiniteBits EventDefined in ghc-internal-9.1003.0 · GHC.Internal.Event.PollFiniteBits CBoolDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesFiniteBits CCharDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesFiniteBits CIntDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesFiniteBits CIntMaxDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesFiniteBits CIntPtrDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesFiniteBits CLLongDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesFiniteBits CLongDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesFiniteBits CPtrdiffDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesFiniteBits CSCharDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesFiniteBits CShortDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesFiniteBits CSigAtomicDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesFiniteBits CSizeDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesFiniteBits CUCharDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesFiniteBits CUIntDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesFiniteBits CUIntMaxDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesFiniteBits CUIntPtrDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesFiniteBits CULLongDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesFiniteBits CULongDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesFiniteBits CUShortDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesFiniteBits CWcharDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.C.TypesFiniteBits IntPtrDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.PtrFiniteBits WordPtrDefined in ghc-internal-9.1003.0 · GHC.Internal.Foreign.PtrFiniteBits Int16Defined in ghc-internal-9.1003.0 · GHC.Internal.IntFiniteBits Int32Defined in ghc-internal-9.1003.0 · GHC.Internal.IntFiniteBits Int64Defined in ghc-internal-9.1003.0 · GHC.Internal.IntFiniteBits Int8Defined in ghc-internal-9.1003.0 · GHC.Internal.IntFiniteBits CBlkCntDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesFiniteBits CBlkSizeDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesFiniteBits CClockIdDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesFiniteBits CDevDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesFiniteBits CFsBlkCntDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesFiniteBits CFsFilCntDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesFiniteBits CGidDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesFiniteBits CIdDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesFiniteBits CInoDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesFiniteBits CKeyDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesFiniteBits CModeDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesFiniteBits CNfdsDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesFiniteBits CNlinkDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesFiniteBits COffDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesFiniteBits CPidDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesFiniteBits CRLimDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesFiniteBits CSocklenDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesFiniteBits CSsizeDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesFiniteBits CTcflagDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesFiniteBits CUidDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesFiniteBits FdDefined in ghc-internal-9.1003.0 · GHC.Internal.System.Posix.TypesFiniteBits Word16Defined in ghc-internal-9.1003.0 · GHC.Internal.WordFiniteBits Word32Defined in ghc-internal-9.1003.0 · GHC.Internal.WordFiniteBits Word64Defined in ghc-internal-9.1003.0 · GHC.Internal.WordFiniteBits Word8Defined in ghc-internal-9.1003.0 · GHC.Internal.WordFiniteBits BoolDefined in ghc-internal-9.1003.0 · GHC.Internal.BitsFiniteBits IntDefined in ghc-internal-9.1003.0 · GHC.Internal.BitsFiniteBits WordDefined in ghc-internal-9.1003.0 · GHC.Internal.BitsFiniteBits a => FiniteBits (And a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsFiniteBits a => FiniteBits (Iff a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsFiniteBits a => FiniteBits (Ior a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsFiniteBits a => FiniteBits (Xor a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsFiniteBits a => FiniteBits (Identity a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.IdentityFiniteBits a => FiniteBits (Down a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.OrdFiniteBits a => FiniteBits (Const a b)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Functor.Const
Monoid under bitwise AND.
getAnd (And 0xab <> And 0x12) :: Word82
Instances9Bounded, Enum, Eq, Read, Show, Semigroup, …
Bounded a => Bounded (And a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsEnum a => Enum (And a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsEq a => Eq (And a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsRead a => Read (And a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsShow a => Show (And a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsBits a => Semigroup (And a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsFiniteBits a => Monoid (And a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsThis constraint is arguably too strong. However, as some types (such as
Natural) have undefined complement, this is the only safe choice.Bits a => Bits (And a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsFiniteBits a => FiniteBits (And a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Bits
Monoid under bitwise 'equality'; defined as 1 if the corresponding
bits match, and 0 otherwise.
getIff (Iff 0xab <> Iff 0x12) :: Word870
Instances9Bounded, Enum, Eq, Read, Show, Semigroup, …
Bounded a => Bounded (Iff a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsEnum a => Enum (Iff a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsEq a => Eq (Iff a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsRead a => Read (Iff a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsShow a => Show (Iff a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsFiniteBits a => Semigroup (Iff a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsThis constraint is arguably too strong. However, as some types (such as
Natural) have undefined complement, this is the only safe choice.FiniteBits a => Monoid (Iff a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsThis constraint is arguably too strong. However, as some types (such as
Natural) have undefined complement, this is the only safe choice.Bits a => Bits (Iff a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsFiniteBits a => FiniteBits (Iff a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Bits
Monoid under bitwise inclusive OR.
getIor (Ior 0xab <> Ior 0x12) :: Word8187
Instances9Bounded, Enum, Eq, Read, Show, Semigroup, …
Bounded a => Bounded (Ior a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsEnum a => Enum (Ior a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsEq a => Eq (Ior a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsRead a => Read (Ior a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsShow a => Show (Ior a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsBits a => Semigroup (Ior a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsBits a => Monoid (Ior a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsBits a => Bits (Ior a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsFiniteBits a => FiniteBits (Ior a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Bits
Monoid under bitwise XOR.
getXor (Xor 0xab <> Xor 0x12) :: Word8185
Instances9Bounded, Enum, Eq, Read, Show, Semigroup, …
Bounded a => Bounded (Xor a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsEnum a => Enum (Xor a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsEq a => Eq (Xor a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsRead a => Read (Xor a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsShow a => Show (Xor a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsBits a => Semigroup (Xor a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsBits a => Monoid (Xor a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsBits a => Bits (Xor a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.BitsFiniteBits a => FiniteBits (Xor a)Defined in ghc-internal-9.1003.0 · GHC.Internal.Data.Bits
Default implementation for testBit.
Note that: testBitDefault x i = (x .&. bit i) /= 0
Default implementation for popCount.
This implementation is intentionally naive. Instances are expected to provide an optimized implementation for their size.
Infix version of xor.
Infix version of shiftR.
Infix version of shiftL.
Infix version of unsafeShiftR.
Infix version of unsafeShiftL.
Attempt to convert an Integral type a to an Integral type b using
the size of the types as measured by Bits methods.
A simpler version of this function is:
toIntegral :: (Integral a, Integral b) => a -> Maybe b
toIntegral x
| toInteger x == toInteger y = Just y
| otherwise = Nothing
where
y = fromIntegral xThis version requires going through Integer, which can be inefficient.
However, toIntegralSized is optimized to allow GHC to statically determine
the relative type sizes (as measured by bitSizeMaybe and isSigned) and
avoid going through Integer for many types. (The implementation uses
fromIntegral, which is itself optimized with rules for base types but may
go through Integer for some type pairs.)
A more concise version of complement zeroBits.
complement (zeroBits :: Word) == (oneBits :: Word)True
complement (oneBits :: Word) == (zeroBits :: Word)True
Note
The constraint on oneBits is arguably too strong. However, as some types
(such as Natural) have undefined complement, this is the only safe
choice.