bitwise-1.0.0.1: fast multi-dimensional unboxed bit packed Bool arrays

Copyright (c) Claude Heiland-Allen 2012 BSD3 claude@mathr.co.uk unstable portable Safe Haskell2010

Data.Bits.Bitwise

Description

Lifting boolean operations on Bool to bitwise operations on Bits.

Packing bits into words, and unpacking words into bits.

Synopsis

# Boolean operations lifted to bitwise operations.

repeat :: Bits b => Bool -> b Source #

Lift a boolean constant to a bitwise constant.

Arguments

 :: Bits b => (Bool -> Bool) operation -> b -> b

Lift a unary boolean operation to a bitwise operation.

The implementation is by exhaustive input/output case analysis: thus the operation provided must be total.

Arguments

 :: Bits b => (Bool -> Bool -> Bool) operation -> b -> b -> b

Lift a binary boolean operation to a bitwise operation.

The implementation is by exhaustive input/output case analysis: thus the operation provided must be total.

or :: Bits b => b -> Bool Source #

True when any bit is set.

and :: Bits b => b -> Bool Source #

True when all bits are set.

Arguments

 :: Bits b => (Bool -> Bool) predicate -> b -> Bool

True when the predicate is true for any bit.

Arguments

 :: Bits b => (Bool -> Bool) predicate -> b -> Bool

True when the predicate is true for all bits.

isUniform :: Bits b => b -> Maybe Bool Source #

Determine if a Bits is all 1s, all 0s, or neither.

# Splitting/joining Bits to/from (lsb, msb).

Arguments

 :: (Num b, Bits b) => Int count -> b

A mask with count least significant bits set.

Arguments

 :: (Num b, Bits b) => Int split point -> b word -> (b, b) (lsb, msb)

Split a word into (lsb, msb). Ensures lsb has no set bits above the split point.

Arguments

 :: Bits b => Int join point -> b least significant bits -> b most significant bits -> b word

Join lsb with msb to make a word. Assumes lsb has no set bits above the join point.

fromBool :: Bits b => Bool -> b Source #

The least significant bit.

# (Un)packing Bits to/from lists of Bool.

Arguments

 :: Bits b => [Bool] $least significant bit, ..., most significant bit$ -> b

Convert a little-endian list of bits to Bits.

Arguments

 :: Bits b => b -> [Bool] $least significant bit, ..., most significant bit$

Convert a Bits to a list of bits, in little-endian order.

Arguments

 :: Bits b => [Bool] $most significant bit, ..., least significant bit$ -> b

Convert a big-endian list of bits to Bits.

Arguments

 :: FiniteBits b => b -> [Bool] $most significant bit, ..., least significant bit$

Convert a FiniteBits to a list of bits, in big-endian order.

# (Un)packing Word8 to/from 8-tuples of Bool.

Arguments

 :: Bool least significant bit -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool most significant bit -> Word8

Pack bits into a byte in little-endian order.

Arguments

 :: Word8 -> (Bool, Bool, Bool, Bool, Bool, Bool, Bool, Bool) (least significant bit, ..., most significant bit)

Extract the bits from a byte in little-endian order.

Arguments

 :: Bool most significant bit -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> Bool least significant bit -> Word8

Pack bits into a byte in big-endian order.

Arguments

 :: Word8 -> (Bool, Bool, Bool, Bool, Bool, Bool, Bool, Bool) (most significant bit, ..., least significant bit)

Extract the bits from a byte in big-endian order.