+takeWhileLessThan ∷ (Integral n, Bitstream bs)
+ ⇒ (Bool → Bool)
+ → n
+ → STRef s bs
+ → ST s n
+{-# INLINEABLE takeWhileLessThan #-}
+takeWhileLessThan f n bsr = go 0
+ where
+ {-# INLINE go #-}
+ go i | i < n
+ = do b ← takeHead bsr
+ if b then
+ go (i + 1)
+ else
+ return i
+ | otherwise
+ = return i
+
+takeBits ∷ (Integral n, Bitstream bs, Bits a) ⇒ n → STRef s bs → ST s a