    {-# LANGUAGE CPP, ForeignFunctionInterface #-}

    module Data.HashMap.PopCount
        ( popCount
        ) where

    #if __GLASGOW_HASKELL__ >= 704
    import Data.Bits (popCount)
    #else
    import Data.Word (Word)
    import Foreign.C (CUInt)
    #endif

    #if __GLASGOW_HASKELL__ < 704
    foreign import ccall unsafe "popc.h popcount" c_popcount :: CUInt -> CUInt

    popCount :: Word -> Int
    popCount w = fromIntegral (c_popcount (fromIntegral w))
    #endif