diff --git a/CHANGES b/CHANGES
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,8 @@
+0.3.29
+
+* Support `primitive-0.8`
+* Use `data-array-byte` shim package for instances for `Data.Array.Byte.ByteArray`
+
 0.3.28
 
 * Add instances for `Data.Array.Byte.ByteArray` (`base-4.17`)
diff --git a/quickcheck-instances.cabal b/quickcheck-instances.cabal
--- a/quickcheck-instances.cabal
+++ b/quickcheck-instances.cabal
@@ -1,5 +1,5 @@
 name:               quickcheck-instances
-version:            0.3.28
+version:            0.3.29
 synopsis:           Common quickcheck instances
 description:
   QuickCheck instances.
@@ -39,10 +39,10 @@
    || ==8.4.4
    || ==8.6.5
    || ==8.8.4
-   || ==8.10.4
+   || ==8.10.7
    || ==9.0.2
-   || ==9.2.4
-   || ==9.4.1
+   || ==9.2.7
+   || ==9.4.4
 
 source-repository head
   type:     git
@@ -98,7 +98,7 @@
     , integer-logarithms    >=1.0.3    && <1.1
     , old-time              >=1.1.0.0  && <1.2
     , OneTuple              >=0.3      && <0.4
-    , primitive             >=0.6.4.0  && <0.8
+    , primitive             >=0.6.4.0  && <0.9
     , scientific            >=0.3.6.2  && <0.4
     , strict                >=0.4      && <0.5
     , tagged                >=0.8.6    && <0.9
@@ -114,6 +114,9 @@
   -- version is irrelevant.
   build-depends:    time
 
+  if impl(ghc >=8.0 && <9.4)
+    build-depends: data-array-byte >=0.1.0.1 && <0.2
+
   if !impl(ghc >=8.0)
     build-depends: semigroups >=0.18.5 && <0.21
 
@@ -149,6 +152,9 @@
     , quickcheck-instances
     , tagged
     , uuid-types
+
+  if impl(ghc >=8.0 && <9.4)
+    build-depends: data-array-byte
 
 benchmark bytestring-gen
   default-language: Haskell2010
diff --git a/src/Test/QuickCheck/Instances/Array/Byte.hs b/src/Test/QuickCheck/Instances/Array/Byte.hs
--- a/src/Test/QuickCheck/Instances/Array/Byte.hs
+++ b/src/Test/QuickCheck/Instances/Array/Byte.hs
@@ -3,7 +3,7 @@
 {-# OPTIONS_GHC -fno-warn-orphans #-}
 module Test.QuickCheck.Instances.Array.Byte () where
 
-#if MIN_VERSION_base(4,17,0)
+#if !MIN_VERSION_primitive(0,8,0) && MIN_VERSION_base(4,9,0)
 
 import Prelude ()
 import Test.QuickCheck.Instances.CustomPrelude
diff --git a/test/Tests.hs b/test/Tests.hs
--- a/test/Tests.hs
+++ b/test/Tests.hs
@@ -1,3 +1,4 @@
+{-# LANGUAGE CPP #-}
 module Main (main) where
 
 import Data.Proxy (Proxy (..))
@@ -6,8 +7,13 @@
 
 import qualified Data.Tree as Tree
 import qualified Data.Primitive as Prim
+
 import           Data.UUID.Types (UUID)
 
+#if MIN_VERSION_base(4,9,0)
+import qualified Data.Array.Byte as AB
+#endif
+
 -- | Example law: == (and thus ===) should be reflexive.
 eqReflexive
     :: (Eq a, Show a)
@@ -22,3 +28,6 @@
     quickCheck $ eqReflexive (Proxy :: Proxy (Tree.Tree Int))
     quickCheck $ eqReflexive (Proxy :: Proxy UUID)
     quickCheck $ eqReflexive (Proxy :: Proxy Prim.ByteArray)
+#if MIN_VERSION_base(4,9,0)
+    quickCheck $ eqReflexive (Proxy :: Proxy AB.ByteArray)
+#endif
