module Compat ( unsafeIOToST , uncons , packCStringLen , unsafeUseAsCStringLen , popCount ) where import Control.Monad.ST (unsafeIOToST) import Data.ByteString (uncons, packCStringLen) import Data.ByteString.Unsafe (unsafeUseAsCStringLen) import Data.Bits ((.&.), shiftR) popCount :: Word64 -> Int popCount = fromIntegral . sum . map (.&. 1) . take 64 . iterate (`shiftR` 1)