diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Revision history for variety
 
+## 0.1.0.1 -- 2025-06-05
+
+* Removed dependency on extra
+
 ## 0.1.0.0 -- 2025-06-04
 
 * First version.
diff --git a/src/Codec/Arithmetic/Variety/BitVec.hs b/src/Codec/Arithmetic/Variety/BitVec.hs
--- a/src/Codec/Arithmetic/Variety/BitVec.hs
+++ b/src/Codec/Arithmetic/Variety/BitVec.hs
@@ -42,7 +42,6 @@
 import qualified Data.Bits as Bits
 import Data.Word (Word8)
 import qualified Data.List as L
-import qualified Data.List.Extra as L
 import Data.ByteString.Lazy (ByteString)
 import qualified Data.ByteString.Lazy as BS
 
@@ -89,12 +88,16 @@
 -- the length is not a multiple of 8.
 toBytes :: BitVec -> ByteString
 toBytes v@(BitVec len _) = BS.pack $ fmap pack8bits $
-                           L.chunksOf 8 $ pad ++ toBits v
+                           chunksOf 8 $ pad ++ toBits v
   where
     padLen = (-len) `mod` 8
     pad = assert ((len + padLen) `mod` 8 == 0) $
           L.replicate padLen False
 
+    chunksOf _ [] = []
+    chunksOf i xs = a : chunksOf i b
+      where (a,b) = L.splitAt i xs
+
 -- | Read bits from the binary representation of an @Integer@. This
 -- excludes the possibility of any leading zeros. Use `bitVec` for more
 -- flexible construction.
@@ -177,13 +180,13 @@
   where intLen = bitLen int
 
 -- | Returns the value of a bit at a given index, with @0@ being the
--- index of the most significant bit.
+-- index of the most significant (left-most) bit.
 (!!) :: BitVec -> Int -> Bool
 (BitVec len int) !! i = Bits.testBit int (len - i - 1)
 infixl 9 !!
 
 -- | Returns the value of a bit at a given index if within bounds, with
--- @0@ being the index of the most significant bit.
+-- @0@ being the index of the most significant (left-most) bit.
 (!?) :: BitVec -> Int -> Maybe Bool
 (BitVec len int) !? i
   | i < 0 || i >= len = Nothing
diff --git a/variety.cabal b/variety.cabal
--- a/variety.cabal
+++ b/variety.cabal
@@ -1,21 +1,33 @@
 cabal-version:      3.0
 name:               variety
-version:            0.1.0.0
+version:            0.1.0.1
 synopsis:           integer arithmetic codes
 
-description:        The @Variety@ module provides functions to optimally encode and decode sequences
-                    of value-base pairs assuming uniform probability.
+description: The
+                    [Variety](https://hackage-content.haskell.org/package/variety/docs/Codec-Arithmetic-Variety.html)
+                    module provides functions to optimally encode and
+                    decode sequences of value-base pairs assuming
+                    uniform probability.
 
-                    If codes get too large and slow to process, @Variety.Bounded@ provides similar
-                    interface with a precision parameter at small cost to code length.
+                    If codes get too large and slow to process,
+                    [Variety.Bounded](https://hackage-content.haskell.org/package/variety/docs/Codec-Arithmetic-Variety-Bounded.html)
+                    provides similar interface with a precision
+                    parameter at small cost to code length.
 
-                    The @Combinatorics@ module provides functions to optimally encode and decode
-                    common combinatorial objects through ranking and unranking.
+                    The
+                    [Combinatorics](https://hackage-content.haskell.org/package/variety/docs/Codec-Arithmetic-Combinatorics.html)
+                    module provides functions to optimally encode and
+                    decode common combinatorial objects through ranking
+                    and unranking.
 
-                    The @Elias@ module provides entirely non-parametric encoding and decoding of
-                    positive integers. The usual definition doesn't allow for an encoding of 0, so a
-                    mapping is baked into the functions in @Elias.Natural@ that shifts the number line
-                    by 1.
+                    The
+                    [Elias](https://hackage-content.haskell.org/package/variety/docs/Codec-Elias.html)
+                    module provides entirely non-parametric encoding and
+                    decoding of positive integers. The usual definition
+                    doesn't allow for an encoding of 0, so a mapping is
+                    baked into the functions in
+                    [Elias.Natural](https://hackage-content.haskell.org/package/variety/docs/Codec-Elias-Natural.html)
+                    that shifts the number line by 1.
 
 license:            MIT
 license-file:       LICENSE
@@ -23,17 +35,15 @@
 maintainer:         nbos@nbos.ca
 homepage:           https://github.com/nbos/variety
 bug-reports:        https://github.com/nbos/variety/issues
-
--- copyright:
 category:           Codec
 build-type:         Simple
-
 extra-doc-files:    CHANGELOG.md
+tested-with:        GHC==9.4.8, GHC==9.6.7, GHC==9.8.4, GHC==9.10.1, GHC==9.12.2
 
 source-repository head
     type: git
     location: https://github.com/nbos/variety
-                    
+
 common warnings
     ghc-options: -Wall
 
@@ -48,11 +58,10 @@
                       Codec.Elias.Natural
     -- other-modules:
     -- other-extensions:
-    build-depends:    base ^>=4.17.2.1
-                    , bytestring >= 0.11.5 && < 0.12
-                    , containers >= 0.6.7 && < 0.7
+    build-depends:    base >= 4.17.2 && < 4.22
+                    , bytestring >= 0.11.5 && < 0.13
+                    , containers >= 0.6.7 && < 0.8
                     , exact-combinatorics >= 0.2.0 && < 0.3
-                    , extra >= 1.8 && < 1.9
 
     hs-source-dirs:   src
     default-language: Haskell2010
@@ -66,8 +75,7 @@
     hs-source-dirs:   test
     main-is:          Main.hs
     build-depends:
-        base ^>=4.17.2.1,
+        base >= 4.17.2 && < 4.22,
         variety,
         QuickCheck,
         HUnit
-
