diff --git a/hw-rankselect-base.cabal b/hw-rankselect-base.cabal
--- a/hw-rankselect-base.cabal
+++ b/hw-rankselect-base.cabal
@@ -1,7 +1,7 @@
 cabal-version: 2.2
 
 name:                   hw-rankselect-base
-version:                0.3.2.2
+version:                0.3.2.3
 synopsis:               Rank-select base
 description:            Please see README.md
 category:               Data, Bit, Succinct Data Structures, Data Structures
diff --git a/src/HaskellWorks/Data/RankSelect/Base/Rank1.hs b/src/HaskellWorks/Data/RankSelect/Base/Rank1.hs
--- a/src/HaskellWorks/Data/RankSelect/Base/Rank1.hs
+++ b/src/HaskellWorks/Data/RankSelect/Base/Rank1.hs
@@ -6,6 +6,7 @@
     ( Rank1(..)
     ) where
 
+import Data.Bits.BitSize
 import Data.Word
 import HaskellWorks.Data.AtIndex
 import HaskellWorks.Data.Bits.BitShown
@@ -50,6 +51,15 @@
   rank1 False 0 = 0
   rank1 False 1 = 0
   rank1 _     _ = error "Invalid position for rank1"
+
+instance (PopCount1 w, Rank1 w, BitSize w) => Rank1 [w] where
+  rank1 = go 0
+    where go c (w:ws) p = if p <= bitCount w
+            then c + rank1 w p
+            else go (c + popCount1 w) ws (p - bitCount w)
+          go c [] _ = c
+
+  {-# INLINABLE rank1 #-}
 
 instance Rank1 (DV.Vector Word8) where
   rank1 v p = popCount1 prefix + if r == 0 then 0 else (`rank1` r) maybeElem
diff --git a/src/HaskellWorks/Data/RankSelect/Base/Select1.hs b/src/HaskellWorks/Data/RankSelect/Base/Select1.hs
--- a/src/HaskellWorks/Data/RankSelect/Base/Select1.hs
+++ b/src/HaskellWorks/Data/RankSelect/Base/Select1.hs
@@ -7,6 +7,7 @@
     ( Select1(..)
     ) where
 
+import Data.Bits.BitSize
 import Data.Word
 import HaskellWorks.Data.AtIndex
 import HaskellWorks.Data.Bits.BitShown
@@ -146,4 +147,15 @@
             case popCount1 w of
               pc | d <= pc -> select1 w d + acc
               pc           -> go (n + 1) (d - pc) (acc + elemFixedBitSize v)
+  {-# INLINE select1 #-}
+
+instance (PopCount1 w, Select1 w, BitSize w) => Select1 [w] where
+  select1 v c = go v c 0
+    where go _ 0 acc = acc
+          go u d acc = case u of
+            w:ws -> let pc = popCount1 w in
+              if d <= pc
+                then select1 w d + acc
+                else go ws (d - pc) (acc + bitCount w)
+            [] -> acc
   {-# INLINE select1 #-}
