hw-bits-0.0.0.1: src/HaskellWorks/Data/Bits/PopCount/PopCount1/GHC.hs
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeFamilies #-}
-- |
-- Copyright: 2016 John Ky
-- License: MIT
--
-- Succinct operations.
module HaskellWorks.Data.Bits.PopCount.PopCount1.GHC
( PopCount1(..)
) where
import qualified Data.Bits as DB
import qualified Data.Vector as DV
import qualified Data.Vector.Storable as DVS
import Data.Word
import HaskellWorks.Data.Positioning
import Prelude as P
class PopCount1 v where
popCount1 :: v -> Count
instance PopCount1 Bool where
popCount1 True = 1
popCount1 False = 0
{-# INLINABLE popCount1 #-}
instance PopCount1 Word8 where
popCount1 = fromIntegral . DB.popCount
{-# INLINABLE popCount1 #-}
instance PopCount1 Word16 where
popCount1 = fromIntegral . DB.popCount
{-# INLINABLE popCount1 #-}
instance PopCount1 Word32 where
popCount1 = fromIntegral . DB.popCount
{-# INLINABLE popCount1 #-}
instance PopCount1 Word64 where
popCount1 = fromIntegral . DB.popCount
{-# INLINABLE popCount1 #-}
instance PopCount1 [Bool] where
popCount1 = P.sum . fmap popCount1
{-# INLINABLE popCount1 #-}
instance PopCount1 [Word8] where
popCount1 = P.sum . fmap popCount1
{-# INLINABLE popCount1 #-}
instance PopCount1 [Word16] where
popCount1 = P.sum . fmap popCount1
{-# INLINABLE popCount1 #-}
instance PopCount1 [Word32] where
popCount1 = P.sum . fmap popCount1
{-# INLINABLE popCount1 #-}
instance PopCount1 [Word64] where
popCount1 = P.sum . fmap popCount1
{-# INLINABLE popCount1 #-}
instance PopCount1 (DV.Vector Word8) where
popCount1 = DV.foldl (\c -> (c +) . popCount1) 0
{-# INLINABLE popCount1 #-}
instance PopCount1 (DV.Vector Word16) where
popCount1 = DV.foldl (\c -> (c +) . popCount1) 0
{-# INLINABLE popCount1 #-}
instance PopCount1 (DV.Vector Word32) where
popCount1 = DV.foldl (\c -> (c +) . popCount1) 0
{-# INLINABLE popCount1 #-}
instance PopCount1 (DV.Vector Word64) where
popCount1 = DV.foldl (\c -> (c +) . popCount1) 0
{-# INLINABLE popCount1 #-}
instance PopCount1 (DVS.Vector Word8) where
popCount1 = DVS.foldl (\c -> (c +) . popCount1) 0
{-# INLINABLE popCount1 #-}
instance PopCount1 (DVS.Vector Word16) where
popCount1 = DVS.foldl (\c -> (c +) . popCount1) 0
{-# INLINABLE popCount1 #-}
instance PopCount1 (DVS.Vector Word32) where
popCount1 = DVS.foldl (\c -> (c +) . popCount1) 0
{-# INLINABLE popCount1 #-}
instance PopCount1 (DVS.Vector Word64) where
popCount1 = DVS.foldl (\c -> (c +) . popCount1) 0
{-# INLINABLE popCount1 #-}