bitarray-0.0.1: Data/BitArray/Immutable.hs
module Data.BitArray.Immutable where
--------------------------------------------------------------------------------
import Data.Word
import Data.Bits
import Data.Array.Unboxed
--------------------------------------------------------------------------------
-- | A packed bit array.
-- Internally, it is represented as an unboxed array of 'Word64'-s.
data BitArray = A
{ _first :: {-# UNPACK #-} !Int
, _last :: {-# UNPACK #-} !Int
, _words :: {-# UNPACK #-} !(UArray Int Word64)
}
--------------------------------------------------------------------------------
ind :: Int -> (Int,Int)
ind i = (k,l) where
k = i `shiftR` 6
l = i - k `shiftL` 6
--------------------------------------------------------------------------------
{-# SPECIALIZE intToBool :: Int -> Bool #-}
intToBool :: Integral a => a -> Bool
intToBool n = case n of
0 -> False
_ -> True
{-# SPECIALIZE boolToInt :: Bool -> Int #-}
boolToInt :: Integral a => Bool -> a
boolToInt b = case b of
False -> 0
True -> 1
--------------------------------------------------------------------------------