diff --git a/Math/NumberTheory/Roots/General.hs b/Math/NumberTheory/Roots/General.hs
--- a/Math/NumberTheory/Roots/General.hs
+++ b/Math/NumberTheory/Roots/General.hs
@@ -9,6 +9,7 @@
 --
 
 {-# LANGUAGE BangPatterns  #-}
+{-# LANGUAGE CPP           #-}
 {-# LANGUAGE MagicHash     #-}
 
 module Math.NumberTheory.Roots.General
@@ -23,6 +24,9 @@
 import Data.List (foldl', sortBy)
 import Data.Maybe (isJust)
 import GHC.Exts (Int(..), Word(..), quotInt#, int2Word#, word2Int#, int2Double#, double2Int#, isTrue#, Ptr(..), indexWord16OffAddr#, (/##), (**##), (<#), (*#), (-#), (+#))
+#if MIN_VERSION_base(4,16,0)
+import GHC.Exts (word16ToWord#)
+#endif
 import GHC.Integer.GMP.Internals (Integer(..), shiftLInteger, shiftRInteger)
 import GHC.Integer.Logarithms (integerLog2#)
 import Numeric.Natural (Natural)
@@ -251,7 +255,11 @@
 smallOddPrimes :: [Integer]
 smallOddPrimes
   = takeWhile (< spBound)
+#if MIN_VERSION_base(4,16,0)
+  $ map (\(I# k#) -> S# (word2Int# (word16ToWord# (indexWord16OffAddr# smallPrimesAddr# k#))))
+#else
   $ map (\(I# k#) -> S# (word2Int# (indexWord16OffAddr# smallPrimesAddr# k#)))
+#endif
     [1 .. smallPrimesLength - 1]
   where
     !(Ptr smallPrimesAddr#) = smallPrimesPtr
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -1,4 +1,4 @@
-# integer-roots [![Build Status](https://travis-ci.org/Bodigrim/integer-roots.svg)](https://travis-ci.org/Bodigrim/integer-roots) [![Hackage](http://img.shields.io/hackage/v/integer-roots.svg)](https://hackage.haskell.org/package/integer-roots) [![Hackage CI](https://matrix.hackage.haskell.org/api/v2/packages/integer-roots/badge)](https://matrix.hackage.haskell.org/package/integer-roots) [![Stackage LTS](http://stackage.org/package/integer-roots/badge/lts)](http://stackage.org/lts/package/integer-roots) [![Stackage Nightly](http://stackage.org/package/integer-roots/badge/nightly)](http://stackage.org/nightly/package/integer-roots)
+# integer-roots [![Build Status](https://github.com/Bodigrim/integer-roots/workflows/Haskell-CI/badge.svg)](https://github.com/Bodigrim/integer-roots/actions?query=workflow%3AHaskell-CI) [![Hackage](http://img.shields.io/hackage/v/integer-roots.svg)](https://hackage.haskell.org/package/integer-roots) [![Hackage CI](https://matrix.hackage.haskell.org/api/v2/packages/integer-roots/badge)](https://matrix.hackage.haskell.org/package/integer-roots) [![Stackage LTS](http://stackage.org/package/integer-roots/badge/lts)](http://stackage.org/lts/package/integer-roots) [![Stackage Nightly](http://stackage.org/package/integer-roots/badge/nightly)](http://stackage.org/nightly/package/integer-roots)
 
 Calculating integer roots and testing perfect powers of arbitrary precision.
 
@@ -37,7 +37,7 @@
 ```haskell
 > integerSquareRoot (3037000502^2)
 3037000501
-> isqrt (2^1024) == 2^1024
+> integerSquareRoot (2^1024) == 2^1024
 True
 ```
 
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,7 @@
+# 1.0.0.1
+
+* Compatibility fixes for GHC 9.2.
+
 # 1.0
 
-Initial release.
+* Initial release.
diff --git a/integer-roots.cabal b/integer-roots.cabal
--- a/integer-roots.cabal
+++ b/integer-roots.cabal
@@ -1,5 +1,5 @@
 name:          integer-roots
-version:       1.0
+version:       1.0.0.1
 cabal-version: >=1.10
 build-type:    Simple
 license:       MIT
@@ -12,7 +12,7 @@
 description:   Calculating integer roots and testing perfect powers of arbitrary precision. Originally part of <https://hackage.haskell.org/package/arithmoi arithmoi> package.
 category:      Math, Algorithms, Number Theory
 author:        Daniel Fischer, Andrew Lelechenko
-tested-with:   GHC ==8.0.2 GHC ==8.2.2 GHC ==8.4.4 GHC ==8.6.5 GHC ==8.8.2
+tested-with:   GHC ==8.0.2 GHC ==8.2.2 GHC ==8.4.4 GHC ==8.6.5 GHC ==8.8.4 GHC ==8.10.4 GHC ==9.0.1
 extra-source-files:
   changelog.md
   README.md
@@ -24,7 +24,7 @@
 library
   build-depends:
     base >=4.9 && <5,
-    integer-gmp <1.1
+    integer-gmp <1.2
   exposed-modules:
     Math.NumberTheory.Roots
   other-modules:
@@ -37,13 +37,13 @@
     Math.NumberTheory.Utils.BitMask
     Math.NumberTheory.Utils.FromIntegral
   default-language: Haskell2010
-  ghc-options: -Wall -Widentities
+  ghc-options: -Wall -Widentities -Wno-deprecations -Wcompat
 
 test-suite integer-roots-tests
   build-depends:
     base >=4.9 && <5,
     integer-roots,
-    smallcheck >=1.1.3 && <1.2,
+    smallcheck >=1.2 && <1.3,
     tasty >=0.10,
     tasty-hunit >=0.9 && <0.11,
     tasty-quickcheck >=0.9 && <0.11,
@@ -59,7 +59,7 @@
   main-is: Test.hs
   default-language: Haskell2010
   hs-source-dirs: test-suite
-  ghc-options: -Wall -Widentities
+  ghc-options: -Wall -Widentities -Wcompat
 
 test-suite integer-roots-doctests
   type: exitcode-stdio-1.0
@@ -69,4 +69,3 @@
     base,
     doctest >= 0.8
   default-language: Haskell2010
-  buildable: False
diff --git a/test-suite/Math/NumberTheory/TestUtils.hs b/test-suite/Math/NumberTheory/TestUtils.hs
--- a/test-suite/Math/NumberTheory/TestUtils.hs
+++ b/test-suite/Math/NumberTheory/TestUtils.hs
@@ -38,12 +38,12 @@
 import Test.SmallCheck.Series (Positive(..), NonNegative(..), Serial(..))
 import Test.Tasty
 import Test.Tasty.SmallCheck as SC
-import Test.Tasty.QuickCheck as QC hiding (Positive, getPositive, NonNegative, generate, getNonNegative)
+import Test.Tasty.QuickCheck as QC hiding (Positive(..), NonNegative(..), generate)
 
 import Data.Bits
 import Data.Int
+import Data.Kind
 import Data.Word
-import GHC.Exts
 import Numeric.Natural
 
 import Math.NumberTheory.TestUtils.Wrappers
@@ -59,12 +59,12 @@
 class    (f (g x)) => (f `Compose` g) x
 instance (f (g x)) => (f `Compose` g) x
 
-type family ConcatMap (w :: * -> Constraint) (cs :: [*]) :: Constraint
+type family ConcatMap (w :: Type -> Constraint) (cs :: [Type]) :: Constraint
   where
     ConcatMap w '[] = ()
     ConcatMap w (c ': cs) = (w c, ConcatMap w cs)
 
-type family Matrix (as :: [* -> Constraint]) (w :: * -> *) (bs :: [*]) :: Constraint
+type family Matrix (as :: [Type -> Constraint]) (w :: Type -> Type) (bs :: [Type]) :: Constraint
   where
     Matrix '[] w bs = ()
     Matrix (a ': as) w bs = (ConcatMap (a `Compose` w) bs, Matrix as w bs)
diff --git a/test-suite/Math/NumberTheory/TestUtils/Wrappers.hs b/test-suite/Math/NumberTheory/TestUtils/Wrappers.hs
--- a/test-suite/Math/NumberTheory/TestUtils/Wrappers.hs
+++ b/test-suite/Math/NumberTheory/TestUtils/Wrappers.hs
@@ -27,7 +27,7 @@
 import Control.Applicative
 import Data.Functor.Classes
 
-import Test.Tasty.QuickCheck as QC hiding (Positive, NonNegative, generate, getNonNegative, getPositive)
+import Test.Tasty.QuickCheck as QC hiding (Positive(..), NonNegative(..))
 import Test.SmallCheck.Series (Positive(..), NonNegative(..), Serial(..), Series)
 
 -------------------------------------------------------------------------------
@@ -51,16 +51,10 @@
 -------------------------------------------------------------------------------
 -- Positive from smallcheck
 
-deriving instance Functor Positive
-
 instance (Num a, Ord a, Arbitrary a) => Arbitrary (Positive a) where
   arbitrary = Positive <$> (arbitrary `suchThat` (> 0))
   shrink (Positive x) = Positive <$> filter (> 0) (shrink x)
 
-instance (Num a, Bounded a) => Bounded (Positive a) where
-  minBound = Positive 1
-  maxBound = Positive (maxBound :: a)
-
 instance Eq1 Positive where
   liftEq eq (Positive a) (Positive b) = a `eq` b
 
@@ -73,16 +67,10 @@
 -------------------------------------------------------------------------------
 -- NonNegative from smallcheck
 
-deriving instance Functor NonNegative
-
 instance (Num a, Ord a, Arbitrary a) => Arbitrary (NonNegative a) where
   arbitrary = NonNegative <$> (arbitrary `suchThat` (>= 0))
   shrink (NonNegative x) = NonNegative <$> filter (>= 0) (shrink x)
 
-instance (Num a, Bounded a) => Bounded (NonNegative a) where
-  minBound = NonNegative 0
-  maxBound = NonNegative (maxBound :: a)
-
 instance Eq1 NonNegative where
   liftEq eq (NonNegative a) (NonNegative b) = a `eq` b
 
@@ -91,16 +79,6 @@
 
 instance Show1 NonNegative where
   liftShowsPrec shw _ p (NonNegative a) = shw p a
-
--------------------------------------------------------------------------------
--- NonZero from QuickCheck
-
-instance (Monad m, Num a, Eq a, Serial m a) => Serial m (NonZero a) where
-  series = NonZero <$> series `suchThatSerial` (/= 0)
-
-instance (Eq a, Num a, Enum a, Bounded a) => Bounded (NonZero a) where
-  minBound = if minBound == (0 :: a) then NonZero (succ minBound) else NonZero minBound
-  maxBound = if maxBound == (0 :: a) then NonZero (pred maxBound) else NonZero maxBound
 
 -------------------------------------------------------------------------------
 -- Huge
