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.3
+version:                0.3.2.4
 synopsis:               Rank-select base
 description:            Please see README.md
 category:               Data, Bit, Succinct Data Structures, Data Structures
@@ -57,8 +57,10 @@
                       , vector
   exposed-modules:      HaskellWorks.Data.RankSelect.Base
                         HaskellWorks.Data.RankSelect.Base.Internal
+                        HaskellWorks.Data.RankSelect.Base.Rank
                         HaskellWorks.Data.RankSelect.Base.Rank0
                         HaskellWorks.Data.RankSelect.Base.Rank1
+                        HaskellWorks.Data.RankSelect.Base.Select
                         HaskellWorks.Data.RankSelect.Base.Select0
                         HaskellWorks.Data.RankSelect.Base.Select1
   other-modules:        Paths_hw_rankselect_base
diff --git a/src/HaskellWorks/Data/RankSelect/Base/Rank.hs b/src/HaskellWorks/Data/RankSelect/Base/Rank.hs
new file mode 100644
--- /dev/null
+++ b/src/HaskellWorks/Data/RankSelect/Base/Rank.hs
@@ -0,0 +1,18 @@
+{-# LANGUAGE FlexibleInstances     #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+
+module HaskellWorks.Data.RankSelect.Base.Rank
+  ( -- * Rank & Select
+    Rank(..)
+  ) where
+
+import HaskellWorks.Data.Positioning
+import HaskellWorks.Data.RankSelect.Base.Rank0
+import HaskellWorks.Data.RankSelect.Base.Rank1
+
+class Eq a => Rank v a where
+  rank :: a -> v -> Count -> Count
+
+instance Rank [Bool] Bool where
+  rank a = if a then rank1 else rank0
+  {-# INLINABLE rank #-}
diff --git a/src/HaskellWorks/Data/RankSelect/Base/Select.hs b/src/HaskellWorks/Data/RankSelect/Base/Select.hs
new file mode 100644
--- /dev/null
+++ b/src/HaskellWorks/Data/RankSelect/Base/Select.hs
@@ -0,0 +1,18 @@
+{-# LANGUAGE FlexibleInstances     #-}
+{-# LANGUAGE MultiParamTypeClasses #-}
+
+module HaskellWorks.Data.RankSelect.Base.Select
+    ( -- * Rank & Select
+      Select(..)
+    ) where
+
+import HaskellWorks.Data.Positioning
+import HaskellWorks.Data.RankSelect.Base.Select0
+import HaskellWorks.Data.RankSelect.Base.Select1
+
+class Eq a => Select v a where
+  select :: a -> v -> Count -> Count
+
+instance Select [Bool] Bool where
+  select a = if a then select1 else select0
+  {-# INLINABLE select #-}
