diff --git a/hw-bits.cabal b/hw-bits.cabal
--- a/hw-bits.cabal
+++ b/hw-bits.cabal
@@ -1,5 +1,5 @@
 name:                   hw-bits
-version:                0.5.0.3
+version:                0.6.0.0
 synopsis:               Bit manipulation
 description:            Please see README.md
 homepage:               http://github.com/haskell-works/hw-bits#readme
diff --git a/src/HaskellWorks/Data/Bits/PopCount/PopCount0.hs b/src/HaskellWorks/Data/Bits/PopCount/PopCount0.hs
--- a/src/HaskellWorks/Data/Bits/PopCount/PopCount0.hs
+++ b/src/HaskellWorks/Data/Bits/PopCount/PopCount0.hs
@@ -82,10 +82,34 @@
   popCount0 = P.sum . fmap popCount0
   {-# INLINE popCount0 #-}
 
-instance PopCount0 a => PopCount0 (DV.Vector a) where
+instance PopCount0 (DV.Vector Word8) where
   popCount0 = DV.foldl' (\c -> (c +) . popCount0) 0
   {-# INLINE popCount0 #-}
 
-instance (DVS.Storable a, PopCount0 a) => PopCount0 (DVS.Vector a) where
+instance PopCount0 (DV.Vector Word16) where
+  popCount0 = DV.foldl' (\c -> (c +) . popCount0) 0
+  {-# INLINE popCount0 #-}
+
+instance PopCount0 (DV.Vector Word32) where
+  popCount0 = DV.foldl' (\c -> (c +) . popCount0) 0
+  {-# INLINE popCount0 #-}
+
+instance PopCount0 (DV.Vector Word64) where
+  popCount0 = DV.foldl' (\c -> (c +) . popCount0) 0
+  {-# INLINE popCount0 #-}
+
+instance PopCount0 (DVS.Vector Word8) where
+  popCount0 = DVS.foldl' (\c -> (c +) . popCount0) 0
+  {-# INLINE popCount0 #-}
+
+instance PopCount0 (DVS.Vector Word16) where
+  popCount0 = DVS.foldl' (\c -> (c +) . popCount0) 0
+  {-# INLINE popCount0 #-}
+
+instance PopCount0 (DVS.Vector Word32) where
+  popCount0 = DVS.foldl' (\c -> (c +) . popCount0) 0
+  {-# INLINE popCount0 #-}
+
+instance PopCount0 (DVS.Vector Word64) where
   popCount0 = DVS.foldl' (\c -> (c +) . popCount0) 0
   {-# INLINE popCount0 #-}
diff --git a/src/HaskellWorks/Data/Bits/PopCount/PopCount1.hs b/src/HaskellWorks/Data/Bits/PopCount/PopCount1.hs
--- a/src/HaskellWorks/Data/Bits/PopCount/PopCount1.hs
+++ b/src/HaskellWorks/Data/Bits/PopCount/PopCount1.hs
@@ -103,10 +103,34 @@
   popCount1 = P.sum . fmap popCount1
   {-# INLINE popCount1 #-}
 
-instance PopCount1 a => PopCount1 (DV.Vector a) where
+instance PopCount1 (DV.Vector Word8) where
   popCount1 = DV.foldl' (\c -> (c +) . popCount1) 0
   {-# INLINE popCount1 #-}
 
-instance (PopCount1 a, DVS.Storable a) => PopCount1 (DVS.Vector a) where
+instance PopCount1 (DV.Vector Word16) where
+  popCount1 = DV.foldl' (\c -> (c +) . popCount1) 0
+  {-# INLINE popCount1 #-}
+
+instance PopCount1 (DV.Vector Word32) where
+  popCount1 = DV.foldl' (\c -> (c +) . popCount1) 0
+  {-# INLINE popCount1 #-}
+
+instance PopCount1 (DV.Vector Word64) where
+  popCount1 = DV.foldl' (\c -> (c +) . popCount1) 0
+  {-# INLINE popCount1 #-}
+
+instance PopCount1 (DVS.Vector Word8) where
+  popCount1 = DVS.foldl' (\c -> (c +) . popCount1) 0
+  {-# INLINE popCount1 #-}
+
+instance PopCount1 (DVS.Vector Word16) where
+  popCount1 = DVS.foldl' (\c -> (c +) . popCount1) 0
+  {-# INLINE popCount1 #-}
+
+instance PopCount1 (DVS.Vector Word32) where
+  popCount1 = DVS.foldl' (\c -> (c +) . popCount1) 0
+  {-# INLINE popCount1 #-}
+
+instance PopCount1 (DVS.Vector Word64) where
   popCount1 = DVS.foldl' (\c -> (c +) . popCount1) 0
   {-# INLINE popCount1 #-}
