diff --git a/deferred-folds.cabal b/deferred-folds.cabal
--- a/deferred-folds.cabal
+++ b/deferred-folds.cabal
@@ -1,5 +1,5 @@
 name: deferred-folds
-version: 0.9.1
+version: 0.9.2
 category: Folding
 synopsis: Abstractions over deferred folds
 description:
diff --git a/library/DeferredFolds/Defs/Unfoldr.hs b/library/DeferredFolds/Defs/Unfoldr.hs
--- a/library/DeferredFolds/Defs/Unfoldr.hs
+++ b/library/DeferredFolds/Defs/Unfoldr.hs
@@ -215,3 +215,31 @@
 zipWithReverseIndex (Unfoldr unfoldr) = Unfoldr $ \ step init -> snd $ unfoldr
   (\ a (index, state) -> (succ index, step (index, a) state))
   (0, init)
+
+{-|
+Indices of set bits.
+-}
+setBitIndices :: FiniteBits a => a -> Unfoldr Int
+setBitIndices a = let
+  !size = finiteBitSize a
+  in Unfoldr $ \ step state -> let
+    loop !index = if index < size
+      then if testBit a index
+        then step index (loop (succ index))
+        else loop (succ index)
+      else state
+    in loop 0
+
+{-|
+Indices of unset bits.
+-}
+unsetBitIndices :: FiniteBits a => a -> Unfoldr Int
+unsetBitIndices a = let
+  !size = finiteBitSize a
+  in Unfoldr $ \ step state -> let
+    loop !index = if index < size
+      then if testBit a index
+        then loop (succ index)
+        else step index (loop (succ index))
+      else state
+    in loop 0
