Data.Bits
| Авторские права | (c) Университет Глазго 2001 |
|---|---|
| Лицензия | BSD (см. файл libraries/base/LICENSE) |
| Поддерживающий | libraries@haskell.org |
| Устойчивость | экспериментальная |
| Переносимость | переносимая |
| Safe Haskell | Надёжная |
| Язык | Haskell2010 |
Описание
Этот модуль определяет побитовые операции для целых чисел со знаком и без знака. Экземпляры класса Bits для типов Int и Integer доступны из этого модуля, а экземпляры для явно размерных целочисленных типов доступны из модулей Data.Int и Data.Word.
class Eq a => Bits a where Исходный код
Класс Bits определяет побитовые операции над целочисленными типами.
- Биты нумеруются с 0, причём бит 0 — это наименее значимый бит.
Методы
(.&.) :: a -> a -> a infixl 7 Источник
Битовое "и"
(.|.) :: a -> a -> a infixl 5 Источник
Битовое "или"
xor :: a -> a -> a infixl 6 Источник
Битовое "исключающее или"
complement :: a -> a Источник
Инвертировать все биты в аргументе
shift :: a -> Int -> a infixl 8 Источник
shift x i сдвигает x влево на i битов, если i положительно, или вправо на -i битов в противном случае. Сдвиги вправо выполняют расширение знака для типов со знаком; т.е. они заполняют старшие биты единицами, если x отрицательно, и нулями в противном случае.
Экземпляр может определить либо этот объединённый shift или shiftL и shiftR, в зависимости от того, что удобнее для рассматриваемого типа.
rotate :: a -> Int -> a infixl 8 Источник
rotate x i циклически сдвигает x влево на i битов, если i положительно, или вправо на -i битов в противном случае.
Для неограниченных типов, таких как Integer, rotate эквивалентно shift.
Экземпляр может определить либо этот объединённый rotate или rotateL и rotateR, в зависимости от того, что удобнее для рассматриваемого типа.
zeroBits — это значение с выключенными всеми битами.
Следующие законы должны выполняться (для всех допустимых битовых индексов n):
clearBit zeroBits n == zeroBits
setBit zeroBits n == bit n
testBit zeroBits n == False
popCount zeroBits == 0
Этот метод использует clearBit (bit 0) 0 в качестве реализации по умолчанию (которая должна быть эквивалентной zeroBits для типов, которые имеют нулевой бит).
С версии: base-4.7.0.0
bit i — это значение с установленным i-м битом и обнуленными всеми другими битами.
Может быть реализован с помощью bitDefault если a также является экземпляром Num.
См. также zeroBits.
setBit :: a -> Int -> a Источник
x `setBit` i — это то же, что и x .|. bit i
clearBit :: a -> Int -> a Источник
x `clearBit` i — это то же, что и x .&. complement (bit i)
complementBit :: a -> Int -> a Источник
x `complementBit` i — это то же, что и x `xor` bit i
testBit :: a -> Int -> Bool Источник
Возвращает True если n-й бит аргумента равен 1
Может быть реализован с помощью testBitDefault если a также является экземпляром Num.
bitSizeMaybe :: a -> Maybe Int Источник
Возвращает количество битов в типе аргумента. Фактическое значение аргумента игнорируется. Возвращает Nothing для типов, которые не имеют фиксированного размера, например, для Integer.
С версии: base-4.7.0.0
Устарело: Используйте bitSizeMaybe или finiteBitSize вместо этого
Возвращает количество битов в типе аргумента. Фактическое значение аргумента игнорируется. Функция bitSize не определена для типов, которые не имеют фиксированного размера, например, для Integer.
Реализация по умолчанию основана на bitSizeMaybe с версии 4.12.0.0.
isSigned :: a -> Bool Источник
Возвращает True если аргумент является типом со знаком. Фактическое значение аргумента игнорируется
shiftL :: a -> Int -> a infixl 8 Источник
Сдвигает аргумент влево на указанное количество битов (которое должно быть неотрицательным). Некоторые экземпляры могут выбросить исключение Overflow если получат отрицательный вход.
Экземпляр может определить либо этот и shiftR или объединённый shift, в зависимости от того, что удобнее для рассматриваемого типа.
unsafeShiftL :: a -> Int -> a Источник
Сдвигает аргумент влево на указанное количество битов. Результат неопределён для отрицательных сдвигов и сдвигов, больших или равных bitSize.
По умолчанию эквивалентно shiftL если не определено явно экземпляром.
С версии: base-4.5.0.0
shiftR :: a -> Int -> a infixl 8 Источник
Сдвигает первый аргумент вправо на указанное количество битов. Результат неопределён для отрицательных сдвигов и сдвигов, больших или равных bitSize. Некоторые экземпляры могут выбросить исключение Overflow если получат отрицательный вход.
Сдвиги вправо выполняют расширение знака для типов со знаком; т.е. они заполняют старшие биты единицами, если x отрицательно, и нулями в противном случае.
Экземпляр может определить либо этот и shiftL или объединённый shift, в зависимости от того, что удобнее для рассматриваемого типа.
unsafeShiftR :: a -> Int -> a Источник
Сдвигает первый аргумент вправо на указанное количество битов, которое должно быть неотрицательным и меньшим количества битов в типе.
Сдвиги вправо выполняют расширение знака для типов со знаком; т.е. они заполняют старшие биты единицами, если x отрицательно, и нулями в противном случае.
По умолчанию эквивалентно shiftR если не определено явно экземпляром.
С версии: base-4.5.0.0
rotateL :: a -> Int -> a infixl 8 Источник
Циклически сдвигает аргумент влево на указанное количество битов (которое должно быть неотрицательным).
Экземпляр может определить либо этот и rotateR или объединённый rotate, в зависимости от того, что удобнее для рассматриваемого типа.
rotateR :: a -> Int -> a infixl 8 Источник
Циклически сдвигает аргумент вправо на указанное количество битов (которое должно быть неотрицательным).
Экземпляр может определить либо этот и rotateL или объединённый rotate, в зависимости от того, что удобнее для рассматриваемого типа.
Возвращает количество установленных битов в аргументе. Это число известно как количество единиц или вес Хэмминга.
Может быть реализовано с использованием popCountDefault если a также является экземпляром Num.
Since: base-4.5.0.0
Экземпляры
| Bits Bool |
Интерпретировать Since: base-4.7.0.0 |
Определено в Data.Bits Методы(.&.) :: Bool -> Bool -> Bool Source (.|.) :: Bool -> Bool -> Bool Source xor :: Bool -> Bool -> Bool Source complement :: Bool -> Bool Source shift :: Bool -> Int -> Bool Source rotate :: Bool -> Int -> Bool Source setBit :: Bool -> Int -> Bool Source clearBit :: Bool -> Int -> Bool Source complementBit :: Bool -> Int -> Bool Source testBit :: Bool -> Int -> Bool Source bitSizeMaybe :: Bool -> Maybe Int Source isSigned :: Bool -> Bool Source shiftL :: Bool -> Int -> Bool Source unsafeShiftL :: Bool -> Int -> Bool Source shiftR :: Bool -> Int -> Bool Source unsafeShiftR :: Bool -> Int -> Bool Source rotateL :: Bool -> Int -> Bool Source | |
| Bits Int | Since: base-2.1 |
Определено в Data.Bits Методы(.&.) :: Int -> Int -> Int Исходный код (.|.) :: Int -> Int -> Int Исходный код xor :: Int -> Int -> Int Исходный код complement :: Int -> Int Исходный код shift :: Int -> Int -> Int Исходный код rotate :: Int -> Int -> Int Исходный код bit :: Int -> Int Исходный код setBit :: Int -> Int -> Int Исходный код clearBit :: Int -> Int -> Int Исходный код complementBit :: Int -> Int -> Int Исходный код testBit :: Int -> Int -> Bool Исходный код bitSizeMaybe :: Int -> Может быть Int Исходный код bitSize :: Int -> Int Исходный код isSigned :: Int -> Bool Исходный код shiftL :: Int -> Int -> Int Исходный код unsafeShiftL :: Int -> Int -> Int Исходный код shiftR :: Int -> Int -> Int Исходный код unsafeShiftR :: Int -> Int -> Int Исходный код rotateL :: Int -> Int -> Int Исходный код rotateR :: Int -> Int -> Int Исходный код popCount :: Int -> Int Исходный код | |
| Bits Int8 | С момента: base-2.1 |
Определено в GHC.Int Методы(.&.) :: Int8 -> Int8 -> Int8 Исходный код (.|.) :: Int8 -> Int8 -> Int8 Исходный код xor :: Int8 -> Int8 -> Int8 Исходный код complement :: Int8 -> Int8 Исходный код shift :: Int8 -> Int -> Int8 Исходный код rotate :: Int8 -> Int -> Int8 Исходный код bit :: Int -> Int8 Исходный код setBit :: Int8 -> Int -> Int8 Исходный код clearBit :: Int8 -> Int -> Int8 Исходный код complementBit :: Int8 -> Int -> Int8 Исходный код testBit :: Int8 -> Int -> Bool Исходный код bitSizeMaybe :: Int8 -> Maybe Int Исходный код bitSize :: Int8 -> Int Исходный код isSigned :: Int8 -> Bool Исходный код shiftL :: Int8 -> Int -> Int8 Исходный код unsafeShiftL :: Int8 -> Int -> Int8 Исходный код shiftR :: Int8 -> Int -> Int8 Исходный код unsafeShiftR :: Int8 -> Int -> Int8 Исходный код rotateL :: Int8 -> Int -> Int8 Исходный код rotateR :: Int8 -> Int -> Int8 Исходный код popCount :: Int8 -> Int Исходный код | |
| Bits Int16 | С момента: base-2.1 |
Определено в GHC.Int Методы(.&.) :: Int64 -> Int64 -> Int64 Исходный код (.|.) :: Int64 -> Int64 -> Int64 Исходный код xor :: Int64 -> Int64 -> Int64 Исходный код complement :: Int64 -> Int64 Исходный код shift :: Int64 -> Int -> Int64 Исходный код rotate :: Int64 -> Int -> Int64 Исходный код zeroBits :: Int64 Исходный код bit :: Int -> Int64 Исходный код isSigned :: Int64 -> Bool Исходный код shiftL :: Int64 -> Int -> Int64 Исходный код unsafeShiftL :: Int64 -> Int -> Int64 Исходный код shiftR :: Int64 -> Int -> Int64 Исходный код unsafeShiftR :: Int64 -> Int -> Int64 Исходный код rotateL :: Int64 -> Int -> Int64 Исходный код rotateR :: Int64 -> Int -> Int64 Исходный код popCount :: Int64 -> Int Исходный код | |
| Bits Целое | С момента: base-2.1 |
Определено в Data.Bits Методы(.&.) :: Word -> Word -> Word Исходный код (.|.) :: Word -> Word -> Word Исходный код xor :: Word -> Word -> Word Исходный код complement :: Word -> Word Исходный код shift :: Word -> Int -> Word Исходный код rotate :: Word -> Int -> Word Исходный код bit :: Int -> Word Исходный код setBit :: Word -> Int -> Word Исходный код clearBit :: Word -> Int -> Word Исходный код complementBit :: Word -> Int -> Word Исходный код testBit :: Word -> Int -> Bool Исходный код bitSizeMaybe :: Word -> Может быть Int Исходный код bitSize :: Word -> Int Исходный код isSigned :: Word -> Bool Исходный код shiftL :: Word -> Int -> Word Исходный код unsafeShiftL :: Word -> Int -> Word Исходный код shiftR :: Word -> Int -> Word Исходный код unsafeShiftR :: Word -> Int -> Word Исходный код rotateL :: Word -> Int -> Word Исходный код rotateR :: Word -> Int -> Word Исходный код popCount :: Word -> Int Исходный код | |
| Bits Word8 | С момента: base-2.1 |
Определено в GHC.Word Краткое описание методов(.&.) :: Word32 -> Word32 -> Word32 Source (.|.) :: Word32 -> Word32 -> Word32 Source xor :: Word32 -> Word32 -> Word32 Source complement :: Word32 -> Word32 Source shift :: Word32 -> Int -> Word32 Source rotate :: Word32 -> Int -> Word32 Source setBit :: Word32 -> Int -> Word32 Source clearBit :: Word32 -> Int -> Word32 Source complementBit :: Word32 -> Int -> Word32 Source testBit :: Word32 -> Int -> Bool Source bitSizeMaybe :: Word32 -> Maybe Int Source bitSize :: Word32 -> Int Source isSigned :: Word32 -> Bool Source shiftL :: Word32 -> Int -> Word32 Source unsafeShiftL :: Word32 -> Int -> Word32 Source shiftR :: Word32 -> Int -> Word32 Source unsafeShiftR :: Word32 -> Int -> Word32 Source rotateL :: Word32 -> Int -> Word32 Source | |
| Bits Word64 | С версии: base-2.1 |
Определено в GHC.Word Методы(.&.) :: Word64 -> Word64 -> Word64 Источник (.|.) :: Word64 -> Word64 -> Word64 Источник xor :: Word64 -> Word64 -> Word64 Источник complement :: Word64 -> Word64 Источник shift :: Word64 -> Int -> Word64 Источник rotate :: Word64 -> Int -> Word64 Источник setBit :: Word64 -> Int -> Word64 Источник clearBit :: Word64 -> Int -> Word64 Источник complementBit :: Word64 -> Int -> Word64 Источник testBit :: Word64 -> Int -> Bool Источник bitSizeMaybe :: Word64 -> Maybe Int Источник bitSize :: Word64 -> Int Источник isSigned :: Word64 -> Bool Источник shiftL :: Word64 -> Int -> Word64 Источник unsafeShiftL :: Word64 -> Int -> Word64 Источник shiftR :: Word64 -> Int -> Word64 Источник unsafeShiftR :: Word64 -> Int -> Word64 Источник rotateL :: Word64 -> Int -> Word64 Источник | |
| Bits IntPtr | |
Определено в Foreign.Ptr Методы(.&.) :: IntPtr -> IntPtr -> IntPtr Источник (.|.) :: IntPtr -> IntPtr -> IntPtr Источник xor :: IntPtr -> IntPtr -> IntPtr Источник complement :: IntPtr -> IntPtr Источник shift :: IntPtr -> Int -> IntPtr Источник rotate :: IntPtr -> Int -> IntPtr Источник setBit :: IntPtr -> Int -> IntPtr Источник clearBit :: IntPtr -> Int -> IntPtr Источник complementBit :: IntPtr -> Int -> IntPtr Источник testBit :: IntPtr -> Int -> Bool Источник bitSizeMaybe :: IntPtr -> Maybe Int Источник bitSize :: IntPtr -> Int Источник isSigned :: IntPtr -> Bool Источник shiftL :: IntPtr -> Int -> IntPtr Источник unsafeShiftL :: IntPtr -> Int -> IntPtr Источник shiftR :: IntPtr -> Int -> IntPtr Источник unsafeShiftR :: IntPtr -> Int -> IntPtr Источник rotateL :: IntPtr -> Int -> IntPtr Источник | |
| Bits WordPtr | |
Определено в Foreign.C.Types Методы(.&.) :: CIntMax -> CIntMax -> CIntMax Source (.|.) :: CIntMax -> CIntMax -> CIntMax Source xor :: CIntMax -> CIntMax -> CIntMax Source complement :: CIntMax -> CIntMax Source shift :: CIntMax -> Int -> CIntMax Source rotate :: CIntMax -> Int -> CIntMax Source setBit :: CIntMax -> Int -> CIntMax Source clearBit :: CIntMax -> Int -> CIntMax Source complementBit :: CIntMax -> Int -> CIntMax Source testBit :: CIntMax -> Int -> Bool Source bitSizeMaybe :: CIntMax -> Maybe Int Source bitSize :: CIntMax -> Int Source isSigned :: CIntMax -> Bool Source shiftL :: CIntMax -> Int -> CIntMax Source unsafeShiftL :: CIntMax -> Int -> CIntMax Source shiftR :: CIntMax -> Int -> CIntMax Source unsafeShiftR :: CIntMax -> Int -> CIntMax Source rotateL :: CIntMax -> Int -> CIntMax Source | |
| Bits CUIntPtr | |
Определено в Foreign.C.Types Краткое описание методов(.&.) :: CWchar -> CWchar -> CWchar Source (.|.) :: CWchar -> CWchar -> CWchar Source xor :: CWchar -> CWchar -> CWchar Source complement :: CWchar -> CWchar Source shift :: CWchar -> Int -> CWchar Source rotate :: CWchar -> Int -> CWchar Source setBit :: CWchar -> Int -> CWchar Source clearBit :: CWchar -> Int -> CWchar Source complementBit :: CWchar -> Int -> CWchar Source testBit :: CWchar -> Int -> Bool Source bitSizeMaybe :: CWchar -> Maybe Int Source bitSize :: CWchar -> Int Source isSigned :: CWchar -> Bool Source shiftL :: CWchar -> Int -> CWchar Source unsafeShiftL :: CWchar -> Int -> CWchar Source shiftR :: CWchar -> Int -> CWchar Source unsafeShiftR :: CWchar -> Int -> CWchar Source rotateL :: CWchar -> Int -> CWchar Source | |
| Bits CSize | |
Определено в Foreign.C.Types Краткое описание методов(.&.) :: CSize -> CSize -> CSize Source (.|.) :: CSize -> CSize -> CSize Source xor :: CSize -> CSize -> CSize Source complement :: CSize -> CSize Source shift :: CSize -> Int -> CSize Source rotate :: CSize -> Int -> CSize Source setBit :: CSize -> Int -> CSize Source clearBit :: CSize -> Int -> CSize Source complementBit :: CSize -> Int -> CSize Source testBit :: CSize -> Int -> Bool Source bitSizeMaybe :: CSize -> Maybe Int Source bitSize :: CSize -> Int Source isSigned :: CSize -> Bool Source shiftL :: CSize -> Int -> CSize Source unsafeShiftL :: CSize -> Int -> CSize Source shiftR :: CSize -> Int -> CSize Source unsafeShiftR :: CSize -> Int -> CSize Source rotateL :: CSize -> Int -> CSize Source | |
| Bits CPtrdiff | |
Определено в Foreign.C.Types Методы(.&.) :: CPtrdiff -> CPtrdiff -> CPtrdiff Исходный код (.|.) :: CPtrdiff -> CPtrdiff -> CPtrdiff Исходный код xor :: CPtrdiff -> CPtrdiff -> CPtrdiff Исходный код complement :: CPtrdiff -> CPtrdiff Исходный код shift :: CPtrdiff -> Int -> CPtrdiff Исходный код rotate :: CPtrdiff -> Int -> CPtrdiff Исходный код zeroBits :: CPtrdiff Исходный код bit :: Int -> CPtrdiff Исходный код setBit :: CPtrdiff -> Int -> CPtrdiff Исходный код clearBit :: CPtrdiff -> Int -> CPtrdiff Исходный код complementBit :: CPtrdiff -> Int -> CPtrdiff Исходный код testBit :: CPtrdiff -> Int -> Bool Исходный код bitSizeMaybe :: CPtrdiff -> Maybe Int Исходный код bitSize :: CPtrdiff -> Int Исходный код isSigned :: CPtrdiff -> Bool Исходный код shiftL :: CPtrdiff -> Int -> CPtrdiff Исходный код unsafeShiftL :: CPtrdiff -> Int -> CPtrdiff Исходный код | |
| Bits CBool | |
Определено в Foreign.C.Types Методы(.&.) :: CBool -> CBool -> CBool Источник (.|.) :: CBool -> CBool -> CBool Источник xor :: CBool -> CBool -> CBool Источник complement :: CBool -> CBool Источник shift :: CBool -> Int -> CBool Источник rotate :: CBool -> Int -> CBool Источник setBit :: CBool -> Int -> CBool Источник clearBit :: CBool -> Int -> CBool Источник complementBit :: CBool -> Int -> CBool Источник testBit :: CBool -> Int -> Bool Источник bitSizeMaybe :: CBool -> Maybe Int Источник bitSize :: CBool -> Int Источник isSigned :: CBool -> Bool Источник shiftL :: CBool -> Int -> CBool Источник unsafeShiftL :: CBool -> Int -> CBool Источник shiftR :: CBool -> Int -> CBool Источник unsafeShiftR :: CBool -> Int -> CBool Источник rotateL :: CBool -> Int -> CBool Источник | |
| Bits CULLong | |
Определено в Foreign.C.Types Методы(.&.) :: CULLong -> CULLong -> CULLong Источник (.|.) :: CULLong -> CULLong -> CULLong Источник xor :: CULLong -> CULLong -> CULLong Источник complement :: CULLong -> CULLong Источник shift :: CULLong -> Int -> CULLong Источник rotate :: CULLong -> Int -> CULLong Источник bit :: Int -> CULLong Источник setBit :: CULLong -> Int -> CULLong Источник clearBit :: CULLong -> Int -> CULLong Источник complementBit :: CULLong -> Int -> CULLong Источник testBit :: CULLong -> Int -> Bool Источник bitSizeMaybe :: CULLong -> Maybe Int Источник bitSize :: CULLong -> Int Источник isSigned :: CULLong -> Bool Источник shiftL :: CULLong -> Int -> CULLong Источник unsafeShiftL :: CULLong -> Int -> CULLong Источник shiftR :: CULLong -> Int -> CULLong Источник unsafeShiftR :: CULLong -> Int -> CULLong Источник rotateL :: CULLong -> Int -> CULLong Источник | |
| Bits CLLong | |
Определено в Foreign.C.Types Краткое описание методов(.&.) :: CULong -> CULong -> CULong Источник (.|.) :: CULong -> CULong -> CULong Источник xor :: CULong -> CULong -> CULong Источник complement :: CULong -> CULong Источник shift :: CULong -> Int -> CULong Источник rotate :: CULong -> Int -> CULong Источник setBit :: CULong -> Int -> CULong Источник clearBit :: CULong -> Int -> CULong Источник complementBit :: CULong -> Int -> CULong Источник testBit :: CULong -> Int -> Bool Источник bitSizeMaybe :: CULong -> Maybe Int Источник bitSize :: CULong -> Int Источник isSigned :: CULong -> Bool Источник shiftL :: CULong -> Int -> CULong Источник unsafeShiftL :: CULong -> Int -> CULong Источник shiftR :: CULong -> Int -> CULong Источник unsafeShiftR :: CULong -> Int -> CULong Источник rotateL :: CULong -> Int -> CULong Источник | |
| Bits CLong | |
Определено в Foreign.C.Types Краткое описание методов(.&.) :: CLong -> CLong -> CLong Источник (.|.) :: CLong -> CLong -> CLong Источник xor :: CLong -> CLong -> CLong Источник complement :: CLong -> CLong Источник shift :: CLong -> Int -> CLong Источник rotate :: CLong -> Int -> CLong Источник setBit :: CLong -> Int -> CLong Источник clearBit :: CLong -> Int -> CLong Источник complementBit :: CLong -> Int -> CLong Источник testBit :: CLong -> Int -> Bool Источник bitSizeMaybe :: CLong -> Maybe Int Источник bitSize :: CLong -> Int Источник isSigned :: CLong -> Bool Источник shiftL :: CLong -> Int -> CLong Источник unsafeShiftL :: CLong -> Int -> CLong Источник shiftR :: CLong -> Int -> CLong Источник unsafeShiftR :: CLong -> Int -> CLong Источник rotateL :: CLong -> Int -> CLong Источник | |
| Bits CUInt | |
Определено в Foreign.C.Types Краткое описание методов(.&.) :: CUInt -> CUInt -> CUInt Source (.|.) :: CUInt -> CUInt -> CUInt Source xor :: CUInt -> CUInt -> CUInt Source complement :: CUInt -> CUInt Source shift :: CUInt -> Int -> CUInt Source rotate :: CUInt -> Int -> CUInt Source setBit :: CUInt -> Int -> CUInt Source clearBit :: CUInt -> Int -> CUInt Source complementBit :: CUInt -> Int -> CUInt Source testBit :: CUInt -> Int -> Bool Source bitSizeMaybe :: CUInt -> Maybe Int Source bitSize :: CUInt -> Int Source isSigned :: CUInt -> Bool Source shiftL :: CUInt -> Int -> CUInt Source unsafeShiftL :: CUInt -> Int -> CUInt Source shiftR :: CUInt -> Int -> CUInt Source unsafeShiftR :: CUInt -> Int -> CUInt Source rotateL :: CUInt -> Int -> CUInt Source | |
| Bits CInt | |
Определено в Foreign.C.Types Краткое описание методов(.&.) :: CInt -> CInt -> CInt Источник (.|.) :: CInt -> CInt -> CInt Источник xor :: CInt -> CInt -> CInt Источник complement :: CInt -> CInt Источник shift :: CInt -> Int -> CInt Источник rotate :: CInt -> Int -> CInt Источник setBit :: CInt -> Int -> CInt Источник clearBit :: CInt -> Int -> CInt Источник complementBit :: CInt -> Int -> CInt Источник testBit :: CInt -> Int -> Bool Источник bitSizeMaybe :: CInt -> Maybe Int Источник bitSize :: CInt -> Int Источник isSigned :: CInt -> Bool Источник shiftL :: CInt -> Int -> CInt Источник unsafeShiftL :: CInt -> Int -> CInt Источник shiftR :: CInt -> Int -> CInt Источник unsafeShiftR :: CInt -> Int -> CInt Источник rotateL :: CInt -> Int -> CInt Источник | |
| Bits CUShort | |
Определено в Foreign.C.Types Методы(.&.) :: CUShort -> CUShort -> CUShort Источник (.|.) :: CUShort -> CUShort -> CUShort Источник xor :: CUShort -> CUShort -> CUShort Источник complement :: CUShort -> CUShort Источник shift :: CUShort -> Int -> CUShort Источник rotate :: CUShort -> Int -> CUShort Источник bit :: Int -> CUShort Источник setBit :: CUShort -> Int -> CUShort Источник clearBit :: CUShort -> Int -> CUShort Источник complementBit :: CUShort -> Int -> CUShort Источник testBit :: CUShort -> Int -> Bool Источник bitSizeMaybe :: CUShort -> Maybe Int Источник bitSize :: CUShort -> Int Источник isSigned :: CUShort -> Bool Источник shiftL :: CUShort -> Int -> CUShort Источник unsafeShiftL :: CUShort -> Int -> CUShort Источник shiftR :: CUShort -> Int -> CUShort Источник unsafeShiftR :: CUShort -> Int -> CUShort Источник rotateL :: CUShort -> Int -> CUShort Источник | |
| Bits CShort | |
Определено в Foreign.C.Types Методы(.&.) :: CUChar -> CUChar -> CUChar Источник (.|.) :: CUChar -> CUChar -> CUChar Источник xor :: CUChar -> CUChar -> CUChar Источник complement :: CUChar -> CUChar Источник shift :: CUChar -> Int -> CUChar Источник rotate :: CUChar -> Int -> CUChar Источник setBit :: CUChar -> Int -> CUChar Источник clearBit :: CUChar -> Int -> CUChar Источник complementBit :: CUChar -> Int -> CUChar Источник testBit :: CUChar -> Int -> Bool Источник bitSizeMaybe :: CUChar -> Maybe Int Источник bitSize :: CUChar -> Int Источник isSigned :: CUChar -> Bool Источник shiftL :: CUChar -> Int -> CUChar Источник unsafeShiftL :: CUChar -> Int -> CUChar Источник shiftR :: CUChar -> Int -> CUChar Источник unsafeShiftR :: CUChar -> Int -> CUChar Источник rotateL :: CUChar -> Int -> CUChar Источник | |
| Bits CSChar | |
Определено в Foreign.C.Types Методы(.&.) :: CSChar -> CSChar -> CSChar Исходный код (.|.) :: CSChar -> CSChar -> CSChar Исходный код xor :: CSChar -> CSChar -> CSChar Исходный код complement :: CSChar -> CSChar Исходный код shift :: CSChar -> Int -> CSChar Исходный код rotate :: CSChar -> Int -> CSChar Исходный код zeroBits :: CSChar Исходный код bit :: Int -> CSChar Исходный код setBit :: CSChar -> Int -> CSChar Исходный код clearBit :: CSChar -> Int -> CSChar Исходный код complementBit :: CSChar -> Int -> CSChar Исходный код testBit :: CSChar -> Int -> Bool Исходный код bitSizeMaybe :: CSChar -> Maybe Int Исходный код bitSize :: CSChar -> Int Исходный код isSigned :: CSChar -> Bool Исходный код shiftL :: CSChar -> Int -> CSChar Исходный код unsafeShiftL :: CSChar -> Int -> CSChar Исходный код | |
| Bits CChar | |
Определено в Foreign.C.Types Краткое описание методов(.&.) :: CChar -> CChar -> CChar Source (.|.) :: CChar -> CChar -> CChar Source xor :: CChar -> CChar -> CChar Source complement :: CChar -> CChar Source shift :: CChar -> Int -> CChar Source rotate :: CChar -> Int -> CChar Source setBit :: CChar -> Int -> CChar Source clearBit :: CChar -> Int -> CChar Source complementBit :: CChar -> Int -> CChar Source testBit :: CChar -> Int -> Bool Source bitSizeMaybe :: CChar -> Maybe Int Source bitSize :: CChar -> Int Source isSigned :: CChar -> Bool Source shiftL :: CChar -> Int -> CChar Source unsafeShiftL :: CChar -> Int -> CChar Source shiftR :: CChar -> Int -> CChar Source unsafeShiftR :: CChar -> Int -> CChar Source rotateL :: CChar -> Int -> CChar Source | |
| Bits Fd | |
Определено в System.Posix.Types Краткое описание методов(.&.) :: Fd -> Fd -> Fd Источник (.|.) :: Fd -> Fd -> Fd Источник xor :: Fd -> Fd -> Fd Источник complement :: Fd -> Fd Источник shift :: Fd -> Int -> Fd Источник rotate :: Fd -> Int -> Fd Источник setBit :: Fd -> Int -> Fd Источник clearBit :: Fd -> Int -> Fd Источник complementBit :: Fd -> Int -> Fd Источник testBit :: Fd -> Int -> Bool Источник bitSizeMaybe :: Fd -> Maybe Int Источник isSigned :: Fd -> Bool Источник shiftL :: Fd -> Int -> Fd Источник unsafeShiftL :: Fd -> Int -> Fd Источник shiftR :: Fd -> Int -> Fd Источник unsafeShiftR :: Fd -> Int -> Fd Источник rotateL :: Fd -> Int -> Fd Источник | |
| Bits CNfds | |
Определено в System.Posix.Types Краткое описание методов(.&.) :: CNfds -> CNfds -> CNfds Source (.|.) :: CNfds -> CNfds -> CNfds Source xor :: CNfds -> CNfds -> CNfds Source complement :: CNfds -> CNfds Source shift :: CNfds -> Int -> CNfds Source rotate :: CNfds -> Int -> CNfds Source setBit :: CNfds -> Int -> CNfds Source clearBit :: CNfds -> Int -> CNfds Source complementBit :: CNfds -> Int -> CNfds Source testBit :: CNfds -> Int -> Bool Source bitSizeMaybe :: CNfds -> Maybe Int Source bitSize :: CNfds -> Int Source isSigned :: CNfds -> Bool Source shiftL :: CNfds -> Int -> CNfds Source unsafeShiftL :: CNfds -> Int -> CNfds Source shiftR :: CNfds -> Int -> CNfds Source unsafeShiftR :: CNfds -> Int -> CNfds Source rotateL :: CNfds -> Int -> CNfds Source | |
| Bits CSocklen | |
Определено в System.Posix.Types Краткое описание методов(.&.) :: CKey -> CKey -> CKey Source (.|.) :: CKey -> CKey -> CKey Source xor :: CKey -> CKey -> CKey Source complement :: CKey -> CKey Source shift :: CKey -> Int -> CKey Source rotate :: CKey -> Int -> CKey Source setBit :: CKey -> Int -> CKey Source clearBit :: CKey -> Int -> CKey Source complementBit :: CKey -> Int -> CKey Source testBit :: CKey -> Int -> Bool Source bitSizeMaybe :: CKey -> Maybe Int Source isSigned :: CKey -> Bool Source shiftL :: CKey -> Int -> CKey Source unsafeShiftL :: CKey -> Int -> CKey Source shiftR :: CKey -> Int -> CKey Source unsafeShiftR :: CKey -> Int -> CKey Source rotateL :: CKey -> Int -> CKey Source | |
| Bits CId | |
Определено в System.Posix.Types Методы(.&.) :: CId -> CId -> CId Исходный код (.|.) :: CId -> CId -> CId Исходный код xor :: CId -> CId -> CId Исходный код complement :: CId -> CId Исходный код shift :: CId -> Int -> CId Исходный код rotate :: CId -> Int -> CId Исходный код bit :: Int -> CId Исходный код setBit :: CId -> Int -> CId Исходный код clearBit :: CId -> Int -> CId Исходный код complementBit :: CId -> Int -> CId Исходный код testBit :: CId -> Int -> Bool Исходный код bitSizeMaybe :: CId -> Maybe Int Исходный код bitSize :: CId -> Int Исходный код isSigned :: CId -> Bool Исходный код shiftL :: CId -> Int -> CId Исходный код unsafeShiftL :: CId -> Int -> CId Исходный код shiftR :: CId -> Int -> CId Исходный код unsafeShiftR :: CId -> Int -> CId Исходный код rotateL :: CId -> Int -> CId Исходный код rotateR :: CId -> Int -> CId Исходный код popCount :: CId -> Int Исходный код | |
| Bits CFsFilCnt | |
Определено в System.Posix.Types Краткое описание методов(.&.) :: CFsBlkCnt -> CFsBlkCnt -> CFsBlkCnt Source (.|.) :: CFsBlkCnt -> CFsBlkCnt -> CFsBlkCnt Source xor :: CFsBlkCnt -> CFsBlkCnt -> CFsBlkCnt Source complement :: CFsBlkCnt -> CFsBlkCnt Source shift :: CFsBlkCnt -> Int -> CFsBlkCnt Source rotate :: CFsBlkCnt -> Int -> CFsBlkCnt Source bit :: Int -> CFsBlkCnt Source setBit :: CFsBlkCnt -> Int -> CFsBlkCnt Source clearBit :: CFsBlkCnt -> Int -> CFsBlkCnt Source complementBit :: CFsBlkCnt -> Int -> CFsBlkCnt Source testBit :: CFsBlkCnt -> Int -> Bool Source bitSizeMaybe :: CFsBlkCnt -> Maybe Int Source bitSize :: CFsBlkCnt -> Int Source isSigned :: CFsBlkCnt -> Bool Source shiftL :: CFsBlkCnt -> Int -> CFsBlkCnt Source unsafeShiftL :: CFsBlkCnt -> Int -> CFsBlkCnt Source shiftR :: CFsBlkCnt -> Int -> CFsBlkCnt Source unsafeShiftR :: CFsBlkCnt -> Int -> CFsBlkCnt Source rotateL :: CFsBlkCnt -> Int -> CFsBlkCnt Source | |
| Bits CClockId | |
Определено в System.Posix.Types Методы(.&.) :: CBlkCnt -> CBlkCnt -> CBlkCnt Source (.|.) :: CBlkCnt -> CBlkCnt -> CBlkCnt Source xor :: CBlkCnt -> CBlkCnt -> CBlkCnt Source complement :: CBlkCnt -> CBlkCnt Source shift :: CBlkCnt -> Int -> CBlkCnt Source rotate :: CBlkCnt -> Int -> CBlkCnt Source setBit :: CBlkCnt -> Int -> CBlkCnt Source clearBit :: CBlkCnt -> Int -> CBlkCnt Source complementBit :: CBlkCnt -> Int -> CBlkCnt Source testBit :: CBlkCnt -> Int -> Bool Source bitSizeMaybe :: CBlkCnt -> Maybe Int Source bitSize :: CBlkCnt -> Int Source isSigned :: CBlkCnt -> Bool Source shiftL :: CBlkCnt -> Int -> CBlkCnt Source unsafeShiftL :: CBlkCnt -> Int -> CBlkCnt Source shiftR :: CBlkCnt -> Int -> CBlkCnt Source unsafeShiftR :: CBlkCnt -> Int -> CBlkCnt Source rotateL :: CBlkCnt -> Int -> CBlkCnt Source | |
| Bits CBlkSize | |
Определено в System.Posix.Types Краткое описание методов(.&.) :: CBlkSize -> CBlkSize -> CBlkSize Source (.|.) :: CBlkSize -> CBlkSize -> CBlkSize Source xor :: CBlkSize -> CBlkSize -> CBlkSize Source complement :: CBlkSize -> CBlkSize Source shift :: CBlkSize -> Int -> CBlkSize Source rotate :: CBlkSize -> Int -> CBlkSize Source setBit :: CBlkSize -> Int -> CBlkSize Source clearBit :: CBlkSize -> Int -> CBlkSize Source complementBit :: CBlkSize -> Int -> CBlkSize Source testBit :: CBlkSize -> Int -> Bool Source bitSizeMaybe :: CBlkSize -> Maybe Int Source bitSize :: CBlkSize -> Int Source isSigned :: CBlkSize -> Bool Source shiftL :: CBlkSize -> Int -> CBlkSize Source unsafeShiftL :: CBlkSize -> Int -> CBlkSize Source shiftR :: CBlkSize -> Int -> CBlkSize Source unsafeShiftR :: CBlkSize -> Int -> CBlkSize Source rotateL :: CBlkSize -> Int -> CBlkSize Source | |
| Bits CRLim | |
Определено в System.Posix.Types Краткое описание методов(.&.) :: CUid -> CUid -> CUid Исходный код (.|.) :: CUid -> CUid -> CUid Исходный код xor :: CUid -> CUid -> CUid Исходный код complement :: CUid -> CUid Исходный код shift :: CUid -> Int -> CUid Исходный код rotate :: CUid -> Int -> CUid Исходный код bit :: Int -> CUid Исходный код setBit :: CUid -> Int -> CUid Исходный код clearBit :: CUid -> Int -> CUid Исходный код complementBit :: CUid -> Int -> CUid Исходный код testBit :: CUid -> Int -> Bool Исходный код bitSizeMaybe :: CUid -> Maybe Int Исходный код bitSize :: CUid -> Int Исходный код isSigned :: CUid -> Bool Исходный код shiftL :: CUid -> Int -> CUid Исходный код unsafeShiftL :: CUid -> Int -> CUid Исходный код shiftR :: CUid -> Int -> CUid Исходный код unsafeShiftR :: CUid -> Int -> CUid Исходный код rotateL :: CUid -> Int -> CUid Исходный код rotateR :: CUid -> Int -> CUid Исходный код popCount :: CUid -> Int Исходный код | |
| Bits CNlink | |
Определено в System.Posix.Types Краткое описание методов(.&.) :: CNlink -> CNlink -> CNlink Source (.|.) :: CNlink -> CNlink -> CNlink Source xor :: CNlink -> CNlink -> CNlink Source complement :: CNlink -> CNlink Source shift :: CNlink -> Int -> CNlink Source rotate :: CNlink -> Int -> CNlink Source setBit :: CNlink -> Int -> CNlink Source clearBit :: CNlink -> Int -> CNlink Source complementBit :: CNlink -> Int -> CNlink Source testBit :: CNlink -> Int -> Bool Source bitSizeMaybe :: CNlink -> Maybe Int Source bitSize :: CNlink -> Int Source isSigned :: CNlink -> Bool Source shiftL :: CNlink -> Int -> CNlink Source unsafeShiftL :: CNlink -> Int -> CNlink Source shiftR :: CNlink -> Int -> CNlink Source unsafeShiftR :: CNlink -> Int -> CNlink Source rotateL :: CNlink -> Int -> CNlink Source | |
| Bits CGid | |
Определено в System.Posix.Types Краткое описание методов(.&.) :: CGid -> CGid -> CGid Источник (.|.) :: CGid -> CGid -> CGid Источник xor :: CGid -> CGid -> CGid Источник complement :: CGid -> CGid Источник shift :: CGid -> Int -> CGid Источник rotate :: CGid -> Int -> CGid Источник setBit :: CGid -> Int -> CGid Источник clearBit :: CGid -> Int -> CGid Источник complementBit :: CGid -> Int -> CGid Источник testBit :: CGid -> Int -> Bool Источник bitSizeMaybe :: CGid -> Maybe Int Источник bitSize :: CGid -> Int Источник isSigned :: CGid -> Bool Источник shiftL :: CGid -> Int -> CGid Источник unsafeShiftL :: CGid -> Int -> CGid Источник shiftR :: CGid -> Int -> CGid Источник unsafeShiftR :: CGid -> Int -> CGid Источник rotateL :: CGid -> Int -> CGid Источник | |
| Bits CSsize | |
Определено в System.Posix.Types Краткое описание методов(.&.) :: CSsize -> CSsize -> CSsize Source (.|.) :: CSsize -> CSsize -> CSsize Source xor :: CSsize -> CSsize -> CSsize Source complement :: CSsize -> CSsize Source shift :: CSsize -> Int -> CSsize Source rotate :: CSsize -> Int -> CSsize Source setBit :: CSsize -> Int -> CSsize Source clearBit :: CSsize -> Int -> CSsize Source complementBit :: CSsize -> Int -> CSsize Source testBit :: CSsize -> Int -> Bool Source bitSizeMaybe :: CSsize -> Maybe Int Source bitSize :: CSsize -> Int Source isSigned :: CSsize -> Bool Source shiftL :: CSsize -> Int -> CSsize Source unsafeShiftL :: CSsize -> Int -> CSsize Source shiftR :: CSsize -> Int -> CSsize Source unsafeShiftR :: CSsize -> Int -> CSsize Source rotateL :: CSsize -> Int -> CSsize Source | |
| Bits CPid | |
Определено в System.Posix.Types Методы(.&.) :: CPid -> CPid -> CPid Source (.|.) :: CPid -> CPid -> CPid Source xor :: CPid -> CPid -> CPid Source complement :: CPid -> CPid Source shift :: CPid -> Int -> CPid Source rotate :: CPid -> Int -> CPid Source setBit :: CPid -> Int -> CPid Source clearBit :: CPid -> Int -> CPid Source complementBit :: CPid -> Int -> CPid Source testBit :: CPid -> Int -> Bool Source bitSizeMaybe :: CPid -> Maybe Int Source isSigned :: CPid -> Bool Source shiftL :: CPid -> Int -> CPid Source unsafeShiftL :: CPid -> Int -> CPid Source shiftR :: CPid -> Int -> CPid Source unsafeShiftR :: CPid -> Int -> CPid Source rotateL :: CPid -> Int -> CPid Source | |
| Bits COff | |
Определено в System.Posix.Types Краткое описание методов(.&.) :: COff -> COff -> COff Source (.|.) :: COff -> COff -> COff Source xor :: COff -> COff -> COff Source complement :: COff -> COff Source shift :: COff -> Int -> COff Source rotate :: COff -> Int -> COff Source setBit :: COff -> Int -> COff Source clearBit :: COff -> Int -> COff Source complementBit :: COff -> Int -> COff Source testBit :: COff -> Int -> Bool Source bitSizeMaybe :: COff -> Maybe Int Source isSigned :: COff -> Bool Source shiftL :: COff -> Int -> COff Source unsafeShiftL :: COff -> Int -> COff Source shiftR :: COff -> Int -> COff Source unsafeShiftR :: COff -> Int -> COff Source rotateL :: COff -> Int -> COff Source | |
| Bits CMode | |
Определено в System.Posix.Types Методы(.&.) :: CIno -> CIno -> CIno Исходный код (.|.) :: CIno -> CIno -> CIno Исходный код xor :: CIno -> CIno -> CIno Исходный код complement :: CIno -> CIno Исходный код shift :: CIno -> Int -> CIno Исходный код rotate :: CIno -> Int -> CIno Исходный код bit :: Int -> CIno Исходный код setBit :: CIno -> Int -> CIno Исходный код clearBit :: CIno -> Int -> CIno Исходный код complementBit :: CIno -> Int -> CIno Исходный код testBit :: CIno -> Int -> Bool Исходный код bitSizeMaybe :: CIno -> Maybe Int Исходный код bitSize :: CIno -> Int Исходный код isSigned :: CIno -> Bool Исходный код shiftL :: CIno -> Int -> CIno Исходный код unsafeShiftL :: CIno -> Int -> CIno Исходный код shiftR :: CIno -> Int -> CIno Исходный код unsafeShiftR :: CIno -> Int -> CIno Исходный код rotateL :: CIno -> Int -> CIno Исходный код rotateR :: CIno -> Int -> CIno Исходный код popCount :: CIno -> Int Исходный код | |
| Bits CDev | |
Определено в System.Posix.Types Краткое описание методов(.&.) :: CDev -> CDev -> CDev Source (.|.) :: CDev -> CDev -> CDev Source xor :: CDev -> CDev -> CDev Source complement :: CDev -> CDev Source shift :: CDev -> Int -> CDev Source rotate :: CDev -> Int -> CDev Source setBit :: CDev -> Int -> CDev Source clearBit :: CDev -> Int -> CDev Source complementBit :: CDev -> Int -> CDev Source testBit :: CDev -> Int -> Bool Source bitSizeMaybe :: CDev -> Maybe Int Source isSigned :: CDev -> Bool Source shiftL :: CDev -> Int -> CDev Source unsafeShiftL :: CDev -> Int -> CDev Source shiftR :: CDev -> Int -> CDev Source unsafeShiftR :: CDev -> Int -> CDev Source rotateL :: CDev -> Int -> CDev Source | |
| Bits a => Bits (Down a) | С версии: base-4.14.0.0 |
класс Bits b => FiniteBits b где Исходный код
Класс FiniteBits обозначает типы с конечным, фиксированным числом разрядов.
С: base-4.7.0.0
Минимальное полное определение
Методы
finiteBitSize :: b -> Int Исходный код
Возвращает количество разрядов в типе аргумента. Фактическое значение аргумента игнорируется. Кроме того, finiteBitSize является полным в отличие от устаревшей функции bitSize, которую она заменяет.
finiteBitSize = bitSize bitSizeMaybe = Just . finiteBitSize
С: base-4.7.0.0
количество_ведущих_нулей :: b -> Int Исходный код
Подсчитывает количество нулевых разрядов, предшествующих наиболее значимому установленному разряду.
countLeadingZeros (zeroBits :: a) = finiteBitSize (zeroBits :: a)
countLeadingZeros может быть использовано для вычисления логарифма по основанию 2 через
logBase2 x = finiteBitSize x - 1 - countLeadingZeros x
Примечание: реализация по умолчанию для этого метода преднамеренно тривиальная. Однако экземпляры, предоставленные для примитивных целочисленных типов, реализованы с использованием машинных инструкций, специфичных для процессора.
С: base-4.8.0.0
количество_замыкающих_нулей :: b -> Int Исходный код
Подсчитывает количество нулевых разрядов, следующих за наименее значимым установленным разрядом.
countTrailingZeros (zeroBits :: a) = finiteBitSize (zeroBits :: a) countTrailingZeros . negate = countTrailingZeros
Соответствующая операция поиска_первого_установленного_разряда может быть выражена через countTrailingZeros следующим образом
findFirstSet x = 1 + countTrailingZeros x
Примечание: реализация по умолчанию для этого метода преднамеренно тривиальная. Однако экземпляры, предоставленные для примитивных целочисленных типов, реализованы с использованием машинных инструкций, специфичных для процессора.
С: base-4.8.0.0
Экземпляры
Определено в Foreign.C.Types МетодыfiniteBitSize :: CULLong -> Int Исходный код | |
| FiniteBits CLLong | |
Определено в Foreign.C.Types | |
| FiniteBits CULong | |
Определено в Foreign.C.Types | |
| FiniteBits CLong | |
Определено в Foreign.C.Types | |
| FiniteBits CUInt | |
Определено в Foreign.C.Types | |
| FiniteBits CInt | |
Определено в Foreign.C.Types | |
| FiniteBits CUShort | |
Определено в Foreign.C.Types МетодыfiniteBitSize :: CUShort -> Int Исходный код | |
| FiniteBits CShort | |
Определено в System.Posix.Types | |
| FiniteBits CMode | |
Определено в System.Posix.Types | |
| FiniteBits CIno | |
Определено в System.Posix.Types | |
| FiniteBits CDev | |
Определено в System.Posix.Types | |
| FiniteBits a => FiniteBits (Down a) | С: base-4.14.0.0 |
Определено в Data.Ord МетодыfiniteBitSize :: Down a -> Int Исходный код countLeadingZeros :: Down a -> Int Исходный код countTrailingZeros :: Down a -> Int Исходный код | |
| FiniteBits a => FiniteBits (Identity a) | С: base-4.9.0.0 |
Определено в Data.Functor.Identity МетодыfiniteBitSize :: Identity a -> Int Исходный код countLeadingZeros :: Identity a -> Int Исходный код countTrailingZeros :: Identity a -> Int Исходный код | |
| FiniteBits a => FiniteBits (Const a b) | С: base-4.9.0.0 |
Определено в Data.Functor.Const МетодыfiniteBitSize :: Const a b -> Int Исходный код countLeadingZeros :: Const a b -> Int Исходный код countTrailingZeros :: Const a b -> Int Исходный код | |
bitDefault :: (Bits a, Num a) => Int -> a Исходный код
Реализация по умолчанию для bit.
Обратите внимание, что: bitDefault i = 1 shiftL i
С: base-4.6.0.0
testBitDefault :: (Bits a, Num a) => a -> Int -> Bool Source
Реализация по умолчанию для testBit.
Обратите внимание: testBitDefault x i = (x .&. bit i) /= 0
С момента: base-4.6.0.0
popCountDefault :: (Bits a, Num a) => a -> Int Source
Реализация по умолчанию для popCount.
Эта реализация преднамеренно простая. От ожидается, что экземпляры обеспечат оптимизированную реализацию для своего размера.
С момента: base-4.6.0.0
toIntegralSized :: (Integral a, Integral b, Bits a, Bits b) => a -> Maybe b Source
Попытка преобразовать тип Integral a в тип Integral b, используя размер типов, измеренный методами Bits.
Более простая версия этой функции:
toIntegral :: (Integral a, Integral b) => a -> Maybe b
toIntegral x
| toInteger x == y = Just (fromInteger y)
| otherwise = Nothing
where
y = toInteger x
Эта версия требует прохождения через Integer, что может быть неэффективным. Однако toIntegralSized оптимизирована, чтобы позволить GHC статически определить относительные размеры типов (измеренные bitSizeMaybe и isSigned) и избежать прохождения через Integer для многих типов. (Реализация использует fromIntegral, которая сама оптимизирована с правилами для типов base, но может пройти через Integer для некоторых пар типов.)
С момента: base-4.8.0.0
© The University of Glasgow and others
Licensed under a BSD-style license (see top of the page).
https://downloads.haskell.org/~ghc/8.10.2/docs/html/libraries/base-4.14.1.0/Data-Bits.html