packages feed

hw-bits 0.0.0.2 → 0.0.0.3

raw patch · 10 files changed

+237/−386 lines, 10 filesdep ~attoparsecdep ~conduitdep ~criterionPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

Dependency ranges changed: attoparsec, conduit, criterion, deepseq, hspec, resourcet, vector

API changes (from Hackage documentation)

- HaskellWorks.Data.Attoparsec.Final.IsChar: class IsChar c
- HaskellWorks.Data.Attoparsec.Final.IsChar: instance HaskellWorks.Data.Attoparsec.Final.IsChar.IsChar GHC.Types.Char
- HaskellWorks.Data.Attoparsec.Final.IsChar: instance HaskellWorks.Data.Attoparsec.Final.IsChar.IsChar GHC.Word.Word8
- HaskellWorks.Data.Attoparsec.Final.IsChar: toChar :: IsChar c => c -> Char
- HaskellWorks.Data.Attoparsec.Final.Parser: (<?>) :: Parser t => Parser t Char -> String -> Parser t Char
- HaskellWorks.Data.Attoparsec.Final.Parser: char :: Parser t => Char -> Parser t Char
- HaskellWorks.Data.Attoparsec.Final.Parser: class MonoTraversable t => Parser t
- HaskellWorks.Data.Attoparsec.Final.Parser: instance HaskellWorks.Data.Attoparsec.Final.Parser.Parser Data.ByteString.Internal.ByteString
- HaskellWorks.Data.Attoparsec.Final.Parser: instance HaskellWorks.Data.Attoparsec.Final.Parser.Parser Data.Text.Internal.Text
- HaskellWorks.Data.Attoparsec.Final.Parser: rational :: (Parser t, Fractional f) => Parser t f
- HaskellWorks.Data.Attoparsec.Final.Parser: satisfy :: Parser t => (Element t -> Bool) -> Parser t (Element t)
- HaskellWorks.Data.Attoparsec.Final.Parser: satisfyChar :: Parser t => (Char -> Bool) -> Parser t Char
- HaskellWorks.Data.Attoparsec.Final.Parser: satisfyWith :: Parser t => (Element t -> a) -> (a -> Bool) -> Parser t a
- HaskellWorks.Data.Attoparsec.Final.Parser: string :: Parser t => t -> Parser t t
- HaskellWorks.Data.Attoparsec.Final.Parser: try :: Parser t => Parser t a -> Parser t a
- HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword: class PopCount1 v
- HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword: instance HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword.PopCount1 (Data.Vector.Storable.Vector GHC.Word.Word16)
- HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword: instance HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword.PopCount1 (Data.Vector.Storable.Vector GHC.Word.Word32)
- HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword: instance HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword.PopCount1 (Data.Vector.Storable.Vector GHC.Word.Word64)
- HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword: instance HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword.PopCount1 (Data.Vector.Storable.Vector GHC.Word.Word8)
- HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword: instance HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword.PopCount1 (Data.Vector.Vector GHC.Word.Word16)
- HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword: instance HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword.PopCount1 (Data.Vector.Vector GHC.Word.Word32)
- HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword: instance HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword.PopCount1 (Data.Vector.Vector GHC.Word.Word64)
- HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword: instance HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword.PopCount1 (Data.Vector.Vector GHC.Word.Word8)
- HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword: instance HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword.PopCount1 GHC.Types.Bool
- HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword: instance HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword.PopCount1 GHC.Word.Word16
- HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword: instance HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword.PopCount1 GHC.Word.Word32
- HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword: instance HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword.PopCount1 GHC.Word.Word64
- HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword: instance HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword.PopCount1 GHC.Word.Word8
- HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword: instance HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword.PopCount1 [GHC.Types.Bool]
- HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword: instance HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword.PopCount1 [GHC.Word.Word16]
- HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword: instance HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword.PopCount1 [GHC.Word.Word32]
- HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword: instance HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword.PopCount1 [GHC.Word.Word64]
- HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword: instance HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword.PopCount1 [GHC.Word.Word8]
- HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword: popCount1 :: PopCount1 v => v -> Count
- HaskellWorks.Data.Bits.PopCount.PopCount1.GHC: class PopCount1 v
- HaskellWorks.Data.Bits.PopCount.PopCount1.GHC: instance HaskellWorks.Data.Bits.PopCount.PopCount1.GHC.PopCount1 (Data.Vector.Storable.Vector GHC.Word.Word16)
- HaskellWorks.Data.Bits.PopCount.PopCount1.GHC: instance HaskellWorks.Data.Bits.PopCount.PopCount1.GHC.PopCount1 (Data.Vector.Storable.Vector GHC.Word.Word32)
- HaskellWorks.Data.Bits.PopCount.PopCount1.GHC: instance HaskellWorks.Data.Bits.PopCount.PopCount1.GHC.PopCount1 (Data.Vector.Storable.Vector GHC.Word.Word64)
- HaskellWorks.Data.Bits.PopCount.PopCount1.GHC: instance HaskellWorks.Data.Bits.PopCount.PopCount1.GHC.PopCount1 (Data.Vector.Storable.Vector GHC.Word.Word8)
- HaskellWorks.Data.Bits.PopCount.PopCount1.GHC: instance HaskellWorks.Data.Bits.PopCount.PopCount1.GHC.PopCount1 (Data.Vector.Vector GHC.Word.Word16)
- HaskellWorks.Data.Bits.PopCount.PopCount1.GHC: instance HaskellWorks.Data.Bits.PopCount.PopCount1.GHC.PopCount1 (Data.Vector.Vector GHC.Word.Word32)
- HaskellWorks.Data.Bits.PopCount.PopCount1.GHC: instance HaskellWorks.Data.Bits.PopCount.PopCount1.GHC.PopCount1 (Data.Vector.Vector GHC.Word.Word64)
- HaskellWorks.Data.Bits.PopCount.PopCount1.GHC: instance HaskellWorks.Data.Bits.PopCount.PopCount1.GHC.PopCount1 (Data.Vector.Vector GHC.Word.Word8)
- HaskellWorks.Data.Bits.PopCount.PopCount1.GHC: instance HaskellWorks.Data.Bits.PopCount.PopCount1.GHC.PopCount1 GHC.Types.Bool
- HaskellWorks.Data.Bits.PopCount.PopCount1.GHC: instance HaskellWorks.Data.Bits.PopCount.PopCount1.GHC.PopCount1 GHC.Word.Word16
- HaskellWorks.Data.Bits.PopCount.PopCount1.GHC: instance HaskellWorks.Data.Bits.PopCount.PopCount1.GHC.PopCount1 GHC.Word.Word32
- HaskellWorks.Data.Bits.PopCount.PopCount1.GHC: instance HaskellWorks.Data.Bits.PopCount.PopCount1.GHC.PopCount1 GHC.Word.Word64
- HaskellWorks.Data.Bits.PopCount.PopCount1.GHC: instance HaskellWorks.Data.Bits.PopCount.PopCount1.GHC.PopCount1 GHC.Word.Word8
- HaskellWorks.Data.Bits.PopCount.PopCount1.GHC: instance HaskellWorks.Data.Bits.PopCount.PopCount1.GHC.PopCount1 [GHC.Types.Bool]
- HaskellWorks.Data.Bits.PopCount.PopCount1.GHC: instance HaskellWorks.Data.Bits.PopCount.PopCount1.GHC.PopCount1 [GHC.Word.Word16]
- HaskellWorks.Data.Bits.PopCount.PopCount1.GHC: instance HaskellWorks.Data.Bits.PopCount.PopCount1.GHC.PopCount1 [GHC.Word.Word32]
- HaskellWorks.Data.Bits.PopCount.PopCount1.GHC: instance HaskellWorks.Data.Bits.PopCount.PopCount1.GHC.PopCount1 [GHC.Word.Word64]
- HaskellWorks.Data.Bits.PopCount.PopCount1.GHC: instance HaskellWorks.Data.Bits.PopCount.PopCount1.GHC.PopCount1 [GHC.Word.Word8]
- HaskellWorks.Data.Bits.PopCount.PopCount1.GHC: popCount1 :: PopCount1 v => v -> Count
+ HaskellWorks.Data.Bits.PopCount.PopCount1: class PopCount1 v
+ HaskellWorks.Data.Bits.PopCount.PopCount1: instance (HaskellWorks.Data.Bits.PopCount.PopCount1.PopCount1 a, Foreign.Storable.Storable a) => HaskellWorks.Data.Bits.PopCount.PopCount1.PopCount1 (Data.Vector.Storable.Vector a)
+ HaskellWorks.Data.Bits.PopCount.PopCount1: instance HaskellWorks.Data.Bits.PopCount.PopCount1.PopCount1 (HaskellWorks.Data.Bits.Types.Broadword.Broadword GHC.Word.Word16)
+ HaskellWorks.Data.Bits.PopCount.PopCount1: instance HaskellWorks.Data.Bits.PopCount.PopCount1.PopCount1 (HaskellWorks.Data.Bits.Types.Broadword.Broadword GHC.Word.Word32)
+ HaskellWorks.Data.Bits.PopCount.PopCount1: instance HaskellWorks.Data.Bits.PopCount.PopCount1.PopCount1 (HaskellWorks.Data.Bits.Types.Broadword.Broadword GHC.Word.Word64)
+ HaskellWorks.Data.Bits.PopCount.PopCount1: instance HaskellWorks.Data.Bits.PopCount.PopCount1.PopCount1 (HaskellWorks.Data.Bits.Types.Broadword.Broadword GHC.Word.Word8)
+ HaskellWorks.Data.Bits.PopCount.PopCount1: instance HaskellWorks.Data.Bits.PopCount.PopCount1.PopCount1 (HaskellWorks.Data.Bits.Types.Builtin.Builtin GHC.Word.Word16)
+ HaskellWorks.Data.Bits.PopCount.PopCount1: instance HaskellWorks.Data.Bits.PopCount.PopCount1.PopCount1 (HaskellWorks.Data.Bits.Types.Builtin.Builtin GHC.Word.Word32)
+ HaskellWorks.Data.Bits.PopCount.PopCount1: instance HaskellWorks.Data.Bits.PopCount.PopCount1.PopCount1 (HaskellWorks.Data.Bits.Types.Builtin.Builtin GHC.Word.Word64)
+ HaskellWorks.Data.Bits.PopCount.PopCount1: instance HaskellWorks.Data.Bits.PopCount.PopCount1.PopCount1 (HaskellWorks.Data.Bits.Types.Builtin.Builtin GHC.Word.Word8)
+ HaskellWorks.Data.Bits.PopCount.PopCount1: instance HaskellWorks.Data.Bits.PopCount.PopCount1.PopCount1 GHC.Types.Bool
+ HaskellWorks.Data.Bits.PopCount.PopCount1: instance HaskellWorks.Data.Bits.PopCount.PopCount1.PopCount1 GHC.Word.Word16
+ HaskellWorks.Data.Bits.PopCount.PopCount1: instance HaskellWorks.Data.Bits.PopCount.PopCount1.PopCount1 GHC.Word.Word32
+ HaskellWorks.Data.Bits.PopCount.PopCount1: instance HaskellWorks.Data.Bits.PopCount.PopCount1.PopCount1 GHC.Word.Word64
+ HaskellWorks.Data.Bits.PopCount.PopCount1: instance HaskellWorks.Data.Bits.PopCount.PopCount1.PopCount1 GHC.Word.Word8
+ HaskellWorks.Data.Bits.PopCount.PopCount1: instance HaskellWorks.Data.Bits.PopCount.PopCount1.PopCount1 a => HaskellWorks.Data.Bits.PopCount.PopCount1.PopCount1 (Data.Vector.Vector a)
+ HaskellWorks.Data.Bits.PopCount.PopCount1: instance HaskellWorks.Data.Bits.PopCount.PopCount1.PopCount1 a => HaskellWorks.Data.Bits.PopCount.PopCount1.PopCount1 [a]
+ HaskellWorks.Data.Bits.PopCount.PopCount1: popCount1 :: PopCount1 v => v -> Count
+ HaskellWorks.Data.Bits.Types.Broadword: Broadword :: a -> Broadword a
+ HaskellWorks.Data.Bits.Types.Broadword: instance Foreign.Storable.Storable a => Foreign.Storable.Storable (HaskellWorks.Data.Bits.Types.Broadword.Broadword a)
+ HaskellWorks.Data.Bits.Types.Broadword: instance GHC.Classes.Eq a => GHC.Classes.Eq (HaskellWorks.Data.Bits.Types.Broadword.Broadword a)
+ HaskellWorks.Data.Bits.Types.Broadword: instance GHC.Show.Show a => GHC.Show.Show (HaskellWorks.Data.Bits.Types.Broadword.Broadword a)
+ HaskellWorks.Data.Bits.Types.Broadword: newtype Broadword a
+ HaskellWorks.Data.Bits.Types.Builtin: Builtin :: a -> Builtin a
+ HaskellWorks.Data.Bits.Types.Builtin: instance Foreign.Storable.Storable a => Foreign.Storable.Storable (HaskellWorks.Data.Bits.Types.Builtin.Builtin a)
+ HaskellWorks.Data.Bits.Types.Builtin: instance GHC.Classes.Eq a => GHC.Classes.Eq (HaskellWorks.Data.Bits.Types.Builtin.Builtin a)
+ HaskellWorks.Data.Bits.Types.Builtin: instance GHC.Show.Show a => GHC.Show.Show (HaskellWorks.Data.Bits.Types.Builtin.Builtin a)
+ HaskellWorks.Data.Bits.Types.Builtin: newtype Builtin a

Files

bench/Main.hs view
@@ -1,20 +1,24 @@ module Main where  import           Criterion.Main-import qualified Data.ByteString                                     as BS--setupEnvBs :: Int -> IO BS.ByteString-setupEnvBs n = return $ BS.pack (take n (cycle [maxBound, 0]))+import qualified Data.Vector.Storable                      as DVS+import           Data.Word+import           HaskellWorks.Data.Bits.PopCount.PopCount1+import           HaskellWorks.Data.Bits.Types.Broadword+import           HaskellWorks.Data.Bits.Types.Builtin+import           HaskellWorks.Data.Positioning -setupEnvBss :: Int -> Int -> IO [BS.ByteString]-setupEnvBss n k = setupEnvBs n >>= \v -> return (replicate k v)+setupEnvVector :: Int -> IO (DVS.Vector Word64)+setupEnvVector n = return $ DVS.fromList (take n (cycle [maxBound, 0])) -benchIdentity :: [Benchmark]-benchIdentity =-  [ env (setupEnvBss 4060 19968) $ \_ -> bgroup "Rank"-    [ bench "Rechunk"   (whnf id "")+benchPopCount1 :: [Benchmark]+benchPopCount1 =+  [ env (setupEnvVector 1000000) $ \bv -> bgroup "PopCount1"+    [ bench "Broadword" (nf (map (\n -> getCount (popCount1 (DVS.take n (DVS.unsafeCast bv :: DVS.Vector (Broadword Word64)))))) [0, 1000..100000])+    , bench "Builtin"   (nf (map (\n -> getCount (popCount1 (DVS.take n (DVS.unsafeCast bv :: DVS.Vector (Builtin   Word64)))))) [0, 1000..100000])+    , bench "Default"   (nf (map (\n -> getCount (popCount1 (DVS.take n (DVS.unsafeCast bv :: DVS.Vector            Word64 ))))) [0, 1000..100000])     ]   ]  main :: IO ()-main = defaultMain benchIdentity+main = defaultMain benchPopCount1
hw-bits.cabal view
@@ -1,5 +1,5 @@ name:                   hw-bits-version:                0.0.0.2+version:                0.0.0.3 synopsis:               Conduits for tokenizing streams. description:            Please see README.md homepage:               http://github.com/haskell-works/hw-bits#readme@@ -18,21 +18,19 @@   hs-source-dirs:       app   main-is:              Main.hs   ghc-options:          -threaded -rtsopts -with-rtsopts=-N -Wall -msse4.2-  build-depends:        base            >= 4       && < 5   ,-                        bytestring                          ,-                        conduit                             ,-                        criterion       >= 1.1.0.0 && < 1.2 ,-                        hw-bits                         ,-                        mmap                                ,-                        resourcet                           ,-                        vector          >= 0.6     && < 0.12+  build-depends:        base            >= 4       && < 5+                      , bytestring+                      , conduit+                      , criterion+                      , hw-bits+                      , mmap+                      , resourcet+                      , vector   default-language:     Haskell2010  library   hs-source-dirs:       src-  exposed-modules:      HaskellWorks.Data.Attoparsec.Final.IsChar-                      , HaskellWorks.Data.Attoparsec.Final.Parser-                      , HaskellWorks.Data.Bits+  exposed-modules:      HaskellWorks.Data.Bits                       , HaskellWorks.Data.Bits.BitLength                       , HaskellWorks.Data.Bits.BitParse                       , HaskellWorks.Data.Bits.BitRead@@ -44,8 +42,8 @@                       , HaskellWorks.Data.Bits.PopCount                       , HaskellWorks.Data.Bits.PopCount.PopCount0                       , HaskellWorks.Data.Bits.PopCount.PopCount1-                      , HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword-                      , HaskellWorks.Data.Bits.PopCount.PopCount1.GHC+                      , HaskellWorks.Data.Bits.Types.Broadword+                      , HaskellWorks.Data.Bits.Types.Builtin                       , HaskellWorks.Data.ByteString                       , HaskellWorks.Data.FromByteString                       , HaskellWorks.Data.FromForeignRegion@@ -57,10 +55,10 @@                       , HaskellWorks.Data.Word   build-depends:        base                            >= 4.7  && < 5                       , array-                      , attoparsec                      >= 0.10+                      , attoparsec                       , bytestring-                      , conduit                         >= 1.1  && < 1.3-                      , deepseq                         <  1.5+                      , conduit+                      , deepseq                       , ghc-prim                       , lens                       , mmap@@ -68,14 +66,14 @@                       , parsec                       , QuickCheck                       , random-                      , resourcet                       >= 1.1+                      , resourcet                       , safe                       , text                       , vector                       , word8    default-language:     Haskell2010-  ghc-options:          -rtsopts -with-rtsopts=-N -Wall -O2 -Wall -msse4.2+  ghc-options:          -rtsopts -with-rtsopts=-N -Wall -O2 -msse4.2  test-suite hw-bits-test   type:                 exitcode-stdio-1.0@@ -84,15 +82,15 @@   other-modules:        HaskellWorks.Data.Bits.BitReadSpec                       , HaskellWorks.Data.Bits.BitWiseSpec   build-depends:        base-                      , attoparsec                      >= 0.10+                      , attoparsec                       , bytestring-                      , conduit                         >= 1.1  && < 1.3-                      , hspec                           >= 1.3+                      , conduit+                      , hspec                       , hw-bits                       , mmap                       , parsec                       , QuickCheck-                      , resourcet                       >= 1.1+                      , resourcet                       , transformers                       , vector   ghc-options:          -threaded -rtsopts -with-rtsopts=-N -Wall@@ -106,14 +104,13 @@     Type: exitcode-stdio-1.0     HS-Source-Dirs: bench     Main-Is: Main.hs-    GHC-Options: -O2 -Wall -msse4.2+    GHC-Options: -Wall -O2 -msse4.2     Default-Language: Haskell2010-    Build-Depends:-        base            >= 4       && < 5   ,-        bytestring                          ,-        conduit                             ,-        criterion       >= 1.1.0.0 && < 1.2 ,-        hw-bits                         ,-        mmap                                ,-        resourcet                           ,-        vector          >= 0.6     && < 0.12+    Build-Depends:      base            >= 4       && < 5+                      , bytestring+                      , conduit+                      , criterion+                      , hw-bits+                      , mmap+                      , resourcet+                      , vector
− src/HaskellWorks/Data/Attoparsec/Final/IsChar.hs
@@ -1,15 +0,0 @@-module HaskellWorks.Data.Attoparsec.Final.IsChar-    ( IsChar(..)-    ) where--import qualified Data.ByteString.Internal as BI-import           Data.Word8--class IsChar c where-  toChar :: c -> Char--instance IsChar Word8 where-  toChar = BI.w2c--instance IsChar Char where-  toChar = id
− src/HaskellWorks/Data/Attoparsec/Final/Parser.hs
@@ -1,42 +0,0 @@-module HaskellWorks.Data.Attoparsec.Final.Parser-  ( Parser(..)-  ) where--import qualified Data.Attoparsec.ByteString                as ABS-import qualified Data.Attoparsec.ByteString.Char8          as BC-import qualified Data.Attoparsec.Text                      as AT-import qualified Data.Attoparsec.Types                     as T-import           Data.ByteString                           (ByteString)-import           Data.MonoTraversable-import           Data.Text                                 (Text)-import           HaskellWorks.Data.Attoparsec.Final.IsChar--class MonoTraversable t => Parser t where-  satisfy :: (Element t -> Bool) -> T.Parser t (Element t)-  satisfyWith :: (Element t -> a) -> (a -> Bool) -> T.Parser t a-  satisfyChar :: (Char -> Bool) -> T.Parser t Char-  string :: t -> T.Parser t t-  try :: T.Parser t a -> T.Parser t a-  char :: Char -> T.Parser t Char-  (<?>) :: T.Parser t Char -> String -> T.Parser t Char-  rational :: Fractional f => T.Parser t f--instance Parser ByteString where-  satisfy = ABS.satisfy-  satisfyWith = ABS.satisfyWith-  satisfyChar = ABS.satisfyWith toChar-  string = ABS.string-  try = ABS.try-  char = BC.char-  (<?>) = (BC.<?>)-  rational = BC.rational--instance Parser Text where-  satisfy = AT.satisfy-  satisfyWith = AT.satisfyWith-  satisfyChar = AT.satisfyWith toChar-  string = AT.string-  try = AT.try-  char = AT.char-  (<?>) = (AT.<?>)-  rational = AT.rational
src/HaskellWorks/Data/Bits/PopCount/PopCount1.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE FlexibleInstances     #-}  -- | -- Copyright: 2016 John Ky@@ -5,7 +6,105 @@ -- -- Succinct operations. module HaskellWorks.Data.Bits.PopCount.PopCount1-    ( module X+    ( PopCount1(..)     ) where -import           HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword as X+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.Bits.BitWise+import           HaskellWorks.Data.Bits.Types.Broadword+import           HaskellWorks.Data.Bits.Types.Builtin+import           HaskellWorks.Data.Positioning+import           Prelude                                as P++type FastWord a = Builtin a++fastWord :: a -> FastWord a+fastWord = Builtin+{-# INLINE fastWord #-}++class PopCount1 v where+  popCount1 :: v -> Count++instance PopCount1 Bool where+  popCount1 True  = 1+  popCount1 False = 0+  {-# INLINE popCount1 #-}++instance PopCount1 (Broadword Word8) where+  popCount1 (Broadword x0) = Count (fromIntegral x3)+    where+      x1 = x0 - ((x0 .&. 0xaa) .>. 1)+      x2 = (x1 .&. 0x33) + ((x1 .>. 2) .&. 0x33)+      x3 = (x2 + (x2 .>. 4)) .&. 0x0f+  {-# INLINE popCount1 #-}++instance PopCount1 (Broadword Word16) where+  popCount1 (Broadword x0) = Count (fromIntegral ((x3 * 0x0101) .>. 8))+    where+      x1 = x0 - ((x0 .&. 0xaaaa) .>. 1)+      x2 = (x1 .&. 0x3333) + ((x1 .>. 2) .&. 0x3333)+      x3 = (x2 + (x2 .>. 4)) .&. 0x0f0f+  {-# INLINE popCount1 #-}++instance PopCount1 (Broadword Word32) where+  popCount1 (Broadword x0) = Count (fromIntegral ((x3 * 0x01010101) .>. 24))+    where+      x1 = x0 - ((x0 .&. 0xaaaaaaaa) .>. 1)+      x2 = (x1 .&. 0x33333333) + ((x1 .>. 2) .&. 0x33333333)+      x3 = (x2 + (x2 .>. 4)) .&. 0x0f0f0f0f+  {-# INLINE popCount1 #-}++instance PopCount1 (Broadword Word64) where+  popCount1 (Broadword x0) = Count ((x3 * 0x0101010101010101) .>. 56)+    where+      x1 = x0 - ((x0 .&. 0xaaaaaaaaaaaaaaaa) .>. 1)+      x2 = (x1 .&. 0x3333333333333333) + ((x1 .>. 2) .&. 0x3333333333333333)+      x3 = (x2 + (x2 .>. 4)) .&. 0x0f0f0f0f0f0f0f0f+  {-# INLINE popCount1 #-}++instance PopCount1 (Builtin Word8) where+  popCount1 (Builtin x0) = fromIntegral (DB.popCount x0)+  {-# INLINE popCount1 #-}++instance PopCount1 (Builtin Word16) where+  popCount1 (Builtin x0) = fromIntegral (DB.popCount x0)+  {-# INLINE popCount1 #-}++instance PopCount1 (Builtin Word32) where+  popCount1 (Builtin x0) = fromIntegral (DB.popCount x0)+  {-# INLINE popCount1 #-}++instance PopCount1 (Builtin Word64) where+  popCount1 (Builtin x0) = fromIntegral (DB.popCount x0)+  {-# INLINE popCount1 #-}++instance PopCount1 Word8 where+  popCount1 = fromIntegral . popCount1 . fastWord+  {-# INLINE popCount1 #-}++instance PopCount1 Word16 where+  popCount1 = fromIntegral . popCount1 . fastWord+  {-# INLINE popCount1 #-}++instance PopCount1 Word32 where+  popCount1 = fromIntegral . popCount1 . fastWord+  {-# INLINE popCount1 #-}++instance PopCount1 Word64 where+  popCount1 = fromIntegral . popCount1 . fastWord+  {-# INLINE popCount1 #-}++instance PopCount1 a => PopCount1 [a] where+  popCount1 = P.sum . fmap popCount1+  {-# INLINE popCount1 #-}++instance PopCount1 a => PopCount1 (DV.Vector a) where+  popCount1 = DV.foldl (\c -> (c +) . popCount1) 0+  {-# INLINE popCount1 #-}++instance (PopCount1 a, DVS.Storable a) => PopCount1 (DVS.Vector a) where+  popCount1 = DVS.foldl (\c -> (c +) . popCount1) 0+  {-# INLINE popCount1 #-}
− src/HaskellWorks/Data/Bits/PopCount/PopCount1/Broadword.hs
@@ -1,111 +0,0 @@-{-# LANGUAGE FlexibleInstances     #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE TypeFamilies          #-}---- |--- Copyright: 2016 John Ky--- License: MIT------ Succinct operations.-module HaskellWorks.Data.Bits.PopCount.PopCount1.Broadword-    ( PopCount1(..)-    ) where--import qualified Data.Vector                    as DV-import qualified Data.Vector.Storable           as DVS-import           Data.Word-import           HaskellWorks.Data.Bits.BitWise-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 x0 = Count (fromIntegral x3)-    where-      x1 = x0 - ((x0 .&. 0xaa) .>. 1)-      x2 = (x1 .&. 0x33) + ((x1 .>. 2) .&. 0x33)-      x3 = (x2 + (x2 .>. 4)) .&. 0x0f-  {-# INLINABLE popCount1 #-}--instance PopCount1 Word16 where-  popCount1 x0 = Count (fromIntegral ((x3 * 0x0101) .>. 8))-    where-      x1 = x0 - ((x0 .&. 0xaaaa) .>. 1)-      x2 = (x1 .&. 0x3333) + ((x1 .>. 2) .&. 0x3333)-      x3 = (x2 + (x2 .>. 4)) .&. 0x0f0f-  {-# INLINABLE popCount1 #-}--instance PopCount1 Word32 where-  popCount1 x0 = Count (fromIntegral ((x3 * 0x01010101) .>. 24))-    where-      x1 = x0 - ((x0 .&. 0xaaaaaaaa) .>. 1)-      x2 = (x1 .&. 0x33333333) + ((x1 .>. 2) .&. 0x33333333)-      x3 = (x2 + (x2 .>. 4)) .&. 0x0f0f0f0f-  {-# INLINABLE popCount1 #-}--instance PopCount1 Word64 where-  popCount1 x0 = Count ((x3 * 0x0101010101010101) .>. 56)-    where-      x1 = x0 - ((x0 .&. 0xaaaaaaaaaaaaaaaa) .>. 1)-      x2 = (x1 .&. 0x3333333333333333) + ((x1 .>. 2) .&. 0x3333333333333333)-      x3 = (x2 + (x2 .>. 4)) .&. 0x0f0f0f0f0f0f0f0f-  {-# 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 #-}
− src/HaskellWorks/Data/Bits/PopCount/PopCount1/GHC.hs
@@ -1,95 +0,0 @@-{-# 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 #-}
+ src/HaskellWorks/Data/Bits/Types/Broadword.hs view
@@ -0,0 +1,7 @@+{-# LANGUAGE GeneralizedNewtypeDeriving #-}++module HaskellWorks.Data.Bits.Types.Broadword where++import Data.Vector.Storable++newtype Broadword a = Broadword a deriving (Eq, Show, Storable)
+ src/HaskellWorks/Data/Bits/Types/Builtin.hs view
@@ -0,0 +1,7 @@+{-# LANGUAGE GeneralizedNewtypeDeriving #-}++module HaskellWorks.Data.Bits.Types.Builtin where++import Data.Vector.Storable++newtype Builtin a = Builtin a deriving (Eq, Show, Storable)
src/HaskellWorks/Data/Vector/VectorLike.hs view
@@ -43,19 +43,19 @@   vTake = take . fromIntegral   vIndex v (Position i) = v !! fromIntegral i   vSlice (Position i) (Position j) = take (fromIntegral j) . drop (fromIntegral i)-  {-# INLINABLE vToList #-}+  {-# INLINABLE vToList   #-}   {-# INLINABLE vFromList #-}-  {-# INLINABLE (!!!) #-}-  {-# INLINABLE vConcat #-}-  {-# INLINABLE vEmpty #-}-  {-# INLINABLE vFilter #-}+  {-# INLINABLE (!!!)     #-}+  {-# INLINABLE vConcat   #-}+  {-# INLINABLE vEmpty    #-}+  {-# INLINABLE vFilter   #-}   {-# INLINABLE vGenerate #-}-  {-# INLINABLE vLength #-}-  {-# INLINABLE vSnoc #-}-  {-# INLINABLE vDrop #-}-  {-# INLINABLE vTake #-}-  {-# INLINABLE vIndex #-}-  {-# INLINABLE vSlice #-}+  {-# INLINABLE vLength   #-}+  {-# INLINABLE vSnoc     #-}+  {-# INLINABLE vDrop     #-}+  {-# INLINABLE vTake     #-}+  {-# INLINABLE vIndex    #-}+  {-# INLINABLE vSlice    #-}  instance VectorLike BS.ByteString where   type Elem BS.ByteString = Word8@@ -74,19 +74,19 @@   vTake = BS.take . fromIntegral   vIndex v (Position i) = BS.index v (fromIntegral i)   vSlice (Position i) (Position j) = BS.take (fromIntegral j) . BS.drop (fromIntegral i)-  {-# INLINABLE vToList #-}+  {-# INLINABLE vToList   #-}   {-# INLINABLE vFromList #-}-  {-# INLINABLE (!!!) #-}-  {-# INLINABLE vConcat #-}-  {-# INLINABLE vEmpty #-}-  {-# INLINABLE vFilter #-}+  {-# INLINABLE (!!!)     #-}+  {-# INLINABLE vConcat   #-}+  {-# INLINABLE vEmpty    #-}+  {-# INLINABLE vFilter   #-}   {-# INLINABLE vGenerate #-}-  {-# INLINABLE vLength #-}-  {-# INLINABLE vSnoc #-}-  {-# INLINABLE vDrop #-}-  {-# INLINABLE vTake #-}-  {-# INLINABLE vIndex #-}-  {-# INLINABLE vSlice #-}+  {-# INLINABLE vLength   #-}+  {-# INLINABLE vSnoc     #-}+  {-# INLINABLE vDrop     #-}+  {-# INLINABLE vTake     #-}+  {-# INLINABLE vIndex    #-}+  {-# INLINABLE vSlice    #-}  instance VectorLike (DV.Vector Word8) where   type Elem (DV.Vector Word8) = Word8@@ -104,19 +104,19 @@   vTake = DV.take . fromIntegral   vIndex v (Position i) = DV.unsafeIndex v (fromIntegral i)   vSlice (Position i) (Position j) = DV.unsafeSlice (fromIntegral i) (fromIntegral j)-  {-# INLINABLE vToList #-}+  {-# INLINABLE vToList   #-}   {-# INLINABLE vFromList #-}-  {-# INLINABLE (!!!) #-}-  {-# INLINABLE vConcat #-}-  {-# INLINABLE vEmpty #-}-  {-# INLINABLE vFilter #-}+  {-# INLINABLE (!!!)     #-}+  {-# INLINABLE vConcat   #-}+  {-# INLINABLE vEmpty    #-}+  {-# INLINABLE vFilter   #-}   {-# INLINABLE vGenerate #-}-  {-# INLINABLE vLength #-}-  {-# INLINABLE vSnoc #-}-  {-# INLINABLE vDrop #-}-  {-# INLINABLE vTake #-}-  {-# INLINABLE vIndex #-}-  {-# INLINABLE vSlice #-}+  {-# INLINABLE vLength   #-}+  {-# INLINABLE vSnoc     #-}+  {-# INLINABLE vDrop     #-}+  {-# INLINABLE vTake     #-}+  {-# INLINABLE vIndex    #-}+  {-# INLINABLE vSlice    #-}  instance VectorLike (DV.Vector Word16) where   type Elem (DV.Vector Word16) = Word16@@ -134,19 +134,19 @@   vTake = DV.take . fromIntegral   vIndex v (Position i) = DV.unsafeIndex v (fromIntegral i)   vSlice (Position i) (Position j) = DV.unsafeSlice (fromIntegral i) (fromIntegral j)-  {-# INLINABLE vToList #-}+  {-# INLINABLE vToList   #-}   {-# INLINABLE vFromList #-}-  {-# INLINABLE (!!!) #-}-  {-# INLINABLE vConcat #-}-  {-# INLINABLE vEmpty #-}-  {-# INLINABLE vFilter #-}+  {-# INLINABLE (!!!)     #-}+  {-# INLINABLE vConcat   #-}+  {-# INLINABLE vEmpty    #-}+  {-# INLINABLE vFilter   #-}   {-# INLINABLE vGenerate #-}-  {-# INLINABLE vLength #-}-  {-# INLINABLE vSnoc #-}-  {-# INLINABLE vDrop #-}-  {-# INLINABLE vTake #-}-  {-# INLINABLE vIndex #-}-  {-# INLINABLE vSlice #-}+  {-# INLINABLE vLength   #-}+  {-# INLINABLE vSnoc     #-}+  {-# INLINABLE vDrop     #-}+  {-# INLINABLE vTake     #-}+  {-# INLINABLE vIndex    #-}+  {-# INLINABLE vSlice    #-}  instance VectorLike (DV.Vector Word32) where   type Elem (DV.Vector Word32) = Word32@@ -164,19 +164,19 @@   vTake = DV.take . fromIntegral   vIndex v (Position i) = DV.unsafeIndex v (fromIntegral i)   vSlice (Position i) (Position j) = DV.unsafeSlice (fromIntegral i) (fromIntegral j)-  {-# INLINABLE vToList #-}+  {-# INLINABLE vToList   #-}   {-# INLINABLE vFromList #-}-  {-# INLINABLE (!!!) #-}-  {-# INLINABLE vConcat #-}-  {-# INLINABLE vEmpty #-}-  {-# INLINABLE vFilter #-}+  {-# INLINABLE (!!!)     #-}+  {-# INLINABLE vConcat   #-}+  {-# INLINABLE vEmpty    #-}+  {-# INLINABLE vFilter   #-}   {-# INLINABLE vGenerate #-}-  {-# INLINABLE vLength #-}-  {-# INLINABLE vSnoc #-}-  {-# INLINABLE vDrop #-}-  {-# INLINABLE vTake #-}-  {-# INLINABLE vIndex #-}-  {-# INLINABLE vSlice #-}+  {-# INLINABLE vLength   #-}+  {-# INLINABLE vSnoc     #-}+  {-# INLINABLE vDrop     #-}+  {-# INLINABLE vTake     #-}+  {-# INLINABLE vIndex    #-}+  {-# INLINABLE vSlice    #-}  instance VectorLike (DV.Vector Word64) where   type Elem (DV.Vector Word64) = Word64@@ -194,19 +194,19 @@   vTake = DV.take . fromIntegral   vIndex v (Position i) = DV.unsafeIndex v (fromIntegral i)   vSlice (Position i) (Position j) = DV.unsafeSlice (fromIntegral i) (fromIntegral j)-  {-# INLINABLE vToList #-}+  {-# INLINABLE vToList   #-}   {-# INLINABLE vFromList #-}-  {-# INLINABLE (!!!) #-}-  {-# INLINABLE vConcat #-}-  {-# INLINABLE vEmpty #-}-  {-# INLINABLE vFilter #-}+  {-# INLINABLE (!!!)     #-}+  {-# INLINABLE vConcat   #-}+  {-# INLINABLE vEmpty    #-}+  {-# INLINABLE vFilter   #-}   {-# INLINABLE vGenerate #-}-  {-# INLINABLE vLength #-}-  {-# INLINABLE vSnoc #-}-  {-# INLINABLE vDrop #-}-  {-# INLINABLE vTake #-}-  {-# INLINABLE vIndex #-}-  {-# INLINABLE vSlice #-}+  {-# INLINABLE vLength   #-}+  {-# INLINABLE vSnoc     #-}+  {-# INLINABLE vDrop     #-}+  {-# INLINABLE vTake     #-}+  {-# INLINABLE vIndex    #-}+  {-# INLINABLE vSlice    #-}  instance VectorLike (DVS.Vector Word8) where   type Elem (DVS.Vector Word8) = Word8@@ -224,19 +224,19 @@   vTake = DVS.take . fromIntegral   vIndex v (Position i) = DVS.unsafeIndex v (fromIntegral i)   vSlice (Position i) (Position j) = DVS.unsafeSlice (fromIntegral i) (fromIntegral j)-  {-# INLINABLE vToList #-}+  {-# INLINABLE vToList   #-}   {-# INLINABLE vFromList #-}-  {-# INLINABLE (!!!) #-}-  {-# INLINABLE vConcat #-}-  {-# INLINABLE vEmpty #-}-  {-# INLINABLE vFilter #-}+  {-# INLINABLE (!!!)     #-}+  {-# INLINABLE vConcat   #-}+  {-# INLINABLE vEmpty    #-}+  {-# INLINABLE vFilter   #-}   {-# INLINABLE vGenerate #-}-  {-# INLINABLE vLength #-}-  {-# INLINABLE vSnoc #-}-  {-# INLINABLE vDrop #-}-  {-# INLINABLE vTake #-}-  {-# INLINABLE vIndex #-}-  {-# INLINABLE vSlice #-}+  {-# INLINABLE vLength   #-}+  {-# INLINABLE vSnoc     #-}+  {-# INLINABLE vDrop     #-}+  {-# INLINABLE vTake     #-}+  {-# INLINABLE vIndex    #-}+  {-# INLINABLE vSlice    #-}  instance VectorLike (DVS.Vector Word16) where   type Elem (DVS.Vector Word16) = Word16