diff --git a/CHANGES b/CHANGES
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,8 @@
+0.3.28
+
+* Add instances for `Data.Array.Byte.ByteArray` (`base-4.17`)
+* Add instances for `Data.Primitive.ByteArray` (`primitive`)
+
 0.3.27
 
 * Add instances for `Backwards`, `Reverse` and `Lift` from `transformers`
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.27
+version:            0.3.28
 synopsis:           Common quickcheck instances
 description:
   QuickCheck instances.
@@ -40,8 +40,9 @@
    || ==8.6.5
    || ==8.8.4
    || ==8.10.4
-   || ==9.0.1
-   || ==9.2.1
+   || ==9.0.2
+   || ==9.2.4
+   || ==9.4.1
 
 source-repository head
   type:     git
@@ -57,6 +58,7 @@
   exposed-modules:
     Test.QuickCheck.Instances
     Test.QuickCheck.Instances.Array
+    Test.QuickCheck.Instances.Array.Byte
     Test.QuickCheck.Instances.ByteString
     Test.QuickCheck.Instances.CaseInsensitive
     Test.QuickCheck.Instances.Containers
@@ -64,6 +66,7 @@
     Test.QuickCheck.Instances.Hashable
     Test.QuickCheck.Instances.Natural
     Test.QuickCheck.Instances.OldTime
+    Test.QuickCheck.Instances.Primitive
     Test.QuickCheck.Instances.Scientific
     Test.QuickCheck.Instances.Semigroup
     Test.QuickCheck.Instances.Solo
@@ -81,31 +84,32 @@
   other-modules:    Test.QuickCheck.Instances.CustomPrelude
   hs-source-dirs:   src
   build-depends:
-      base        >=4.5    && <4.17
+      base        >=4.5    && <4.18
     , QuickCheck  >=2.14.1 && <2.14.3
     , splitmix    >=0.0.2  && <0.2
 
   build-depends:
-      array                 >=0.4.0.0 && <0.6
-    , bytestring            >=0.9.2.1 && <0.12
-    , case-insensitive      >=1.2.0.4 && <1.3
-    , containers            >=0.4.2.1 && <0.7
-    , data-fix              >=0.3     && <0.4
-    , hashable              >=1.2.7.0 && <1.5
-    , integer-logarithms    >=1.0.3   && <1.1
-    , old-time              >=1.1.0.0 && <1.2
-    , OneTuple              >=0.3     && <0.4
-    , scientific            >=0.3.6.2 && <0.4
-    , strict                >=0.4     && <0.5
-    , tagged                >=0.8.6   && <0.9
-    , text                  >=1.2.3.0 && <1.3
-    , these                 >=1.1.1.1 && <1.2
-    , time-compat           >=1.9.4   && <1.10
-    , transformers          >=0.3.0.0 && <0.7
-    , transformers-compat   >=0.6.5   && <0.8
-    , unordered-containers  >=0.2.2.0 && <0.3
-    , uuid-types            >=1.0.3   && <1.1
-    , vector                >=0.9     && <0.13
+      array                 >=0.4.0.0  && <0.6
+    , bytestring            >=0.9.2.1  && <0.12
+    , case-insensitive      >=1.2.0.4  && <1.3
+    , containers            >=0.4.2.1  && <0.7
+    , data-fix              >=0.3      && <0.4
+    , hashable              >=1.2.7.0  && <1.5
+    , 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
+    , scientific            >=0.3.6.2  && <0.4
+    , strict                >=0.4      && <0.5
+    , tagged                >=0.8.6    && <0.9
+    , text                  >=1.2.3.0  && <1.3 || >=2.0 && <2.1
+    , these                 >=1.1.1.1  && <1.2
+    , time-compat           >=1.9.4    && <1.10
+    , transformers          >=0.3.0.0  && <0.7
+    , transformers-compat   >=0.6.5    && <0.8
+    , unordered-containers  >=0.2.2.0  && <0.3
+    , uuid-types            >=1.0.3    && <1.1
+    , vector                >=0.12.3.1 && <0.14
 
   -- version is irrelevant.
   build-depends:    time
@@ -115,7 +119,7 @@
 
   if !impl(ghc >=7.10)
     build-depends:
-        nats  >=1     && <1.2
+        nats  >=1.1.2 && <1.2
       , void  >=0.7.2 && <0.8
 
   if flag(bytestring-builder)
@@ -140,6 +144,7 @@
   build-depends:
       base
     , containers
+    , primitive
     , QuickCheck
     , quickcheck-instances
     , tagged
diff --git a/src/Test/QuickCheck/Instances.hs b/src/Test/QuickCheck/Instances.hs
--- a/src/Test/QuickCheck/Instances.hs
+++ b/src/Test/QuickCheck/Instances.hs
@@ -1,6 +1,4 @@
 {-# LANGUAGE CPP              #-}
-{-# LANGUAGE FlexibleContexts #-}
-{-# OPTIONS_GHC -fno-warn-orphans #-}
 {-|
 Instances are provided for the types in the packages:
 
@@ -32,6 +30,8 @@
 
  * uuid
 
+ * primitive
+
  * vector
 
 Since all of these instances are provided as orphans, I recommend that
@@ -44,14 +44,15 @@
 module Test.QuickCheck.Instances () where
 
 import Test.QuickCheck.Instances.Array ()
+import Test.QuickCheck.Instances.Array.Byte ()
 import Test.QuickCheck.Instances.ByteString ()
 import Test.QuickCheck.Instances.CaseInsensitive ()
 import Test.QuickCheck.Instances.Containers ()
 import Test.QuickCheck.Instances.DataFix ()
 import Test.QuickCheck.Instances.Hashable ()
 import Test.QuickCheck.Instances.Natural ()
-import Test.QuickCheck.Instances.Natural ()
 import Test.QuickCheck.Instances.OldTime ()
+import Test.QuickCheck.Instances.Primitive ()
 import Test.QuickCheck.Instances.Scientific ()
 import Test.QuickCheck.Instances.Semigroup ()
 import Test.QuickCheck.Instances.Solo ()
diff --git a/src/Test/QuickCheck/Instances/Array/Byte.hs b/src/Test/QuickCheck/Instances/Array/Byte.hs
new file mode 100644
--- /dev/null
+++ b/src/Test/QuickCheck/Instances/Array/Byte.hs
@@ -0,0 +1,36 @@
+{-# LANGUAGE CPP              #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+module Test.QuickCheck.Instances.Array.Byte () where
+
+#if MIN_VERSION_base(4,17,0)
+
+import Prelude ()
+import Test.QuickCheck.Instances.CustomPrelude
+import Test.QuickCheck.Instances.Primitive ()
+
+import Test.QuickCheck
+
+import Data.Array.Byte (ByteArray (..))
+import qualified Data.Primitive as P
+
+-- | @since 0.3.28
+instance Arbitrary ByteArray where
+    arbitrary = fromP <$> arbitrary
+    shrink ba = fromP <$> shrink (toP ba)
+
+-- | @since 0.3.28
+instance CoArbitrary ByteArray where
+    coarbitrary ba = coarbitrary (toP ba)
+
+-- | @since 0.3.28
+instance Function ByteArray where
+    function = functionMap toP fromP
+
+toP :: ByteArray -> P.ByteArray
+toP (ByteArray ba) = P.ByteArray ba
+
+fromP :: P.ByteArray -> ByteArray
+fromP (P.ByteArray ba) = ByteArray ba
+
+#endif
diff --git a/src/Test/QuickCheck/Instances/Primitive.hs b/src/Test/QuickCheck/Instances/Primitive.hs
new file mode 100644
--- /dev/null
+++ b/src/Test/QuickCheck/Instances/Primitive.hs
@@ -0,0 +1,36 @@
+{-# LANGUAGE CPP              #-}
+{-# LANGUAGE FlexibleContexts #-}
+{-# OPTIONS_GHC -fno-warn-orphans #-}
+module Test.QuickCheck.Instances.Primitive () where
+
+import Prelude ()
+import Test.QuickCheck.Instances.CustomPrelude
+
+import Data.Word (Word8)
+
+import Test.QuickCheck
+
+import qualified Data.Primitive as P
+
+-------------------------------------------------------------------------------
+-- ByteArray
+-------------------------------------------------------------------------------
+
+-- | @since 0.3.28
+instance Arbitrary P.ByteArray where
+    arbitrary = byteArrayFromList <$> arbitrary
+    shrink ba = byteArrayFromList <$> shrink (byteArrayToList ba)
+
+-- | @since 0.3.28
+instance CoArbitrary P.ByteArray where
+    coarbitrary ba = coarbitrary (byteArrayToList ba)
+
+-- | @since 0.3.28
+instance Function P.ByteArray where
+    function = functionMap byteArrayToList byteArrayFromList
+
+byteArrayFromList :: [Word8] -> P.ByteArray
+byteArrayFromList = P.byteArrayFromList
+
+byteArrayToList :: P.ByteArray -> [Word8]
+byteArrayToList = P.foldrByteArray (:) []
diff --git a/test/Tests.hs b/test/Tests.hs
--- a/test/Tests.hs
+++ b/test/Tests.hs
@@ -5,6 +5,7 @@
 import Test.QuickCheck.Instances ()
 
 import qualified Data.Tree as Tree
+import qualified Data.Primitive as Prim
 import           Data.UUID.Types (UUID)
 
 -- | Example law: == (and thus ===) should be reflexive.
@@ -20,3 +21,4 @@
     quickCheck $ eqReflexive (Proxy :: Proxy Int)
     quickCheck $ eqReflexive (Proxy :: Proxy (Tree.Tree Int))
     quickCheck $ eqReflexive (Proxy :: Proxy UUID)
+    quickCheck $ eqReflexive (Proxy :: Proxy Prim.ByteArray)
