diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # Revision history for bytesmith
 
+## 0.3.9.1 -- 2022-12-06
+
+* Build with GHC 9.4.
+
 ## 0.3.9.0 -- 2022-07-14
 
 * Build with GHC 9.2.3.
diff --git a/bytesmith.cabal b/bytesmith.cabal
--- a/bytesmith.cabal
+++ b/bytesmith.cabal
@@ -1,6 +1,6 @@
 cabal-version: 2.2
 name: bytesmith
-version: 0.3.9.0
+version: 0.3.9.1
 synopsis: Nonresumable byte parser
 description:
   Parse bytes as fast as possible. This is a nonresumable parser
@@ -15,6 +15,7 @@
 copyright: 2019 Andrew Martin
 category: Data
 extra-source-files: CHANGELOG.md
+tested-with: GHC == 8.6.5 || == 8.8.4 || == 8.10.7 || == 9.0.2 || == 9.2.5 || == 9.4.3
 
 library
   exposed-modules:
@@ -33,7 +34,7 @@
     Data.Bytes.Parser.Types
   build-depends:
     , base >=4.12 && <5
-    , bytestring >=0.10.8 && <=0.11.3.0
+    , bytestring >=0.10.8 && <=0.12
     , byteslice >=0.2.6 && <0.3
     , contiguous >= 0.6 && < 0.7
     , primitive >=0.7 && <0.8
diff --git a/src/Data/Bytes/Parser/Latin.hs b/src/Data/Bytes/Parser/Latin.hs
--- a/src/Data/Bytes/Parser/Latin.hs
+++ b/src/Data/Bytes/Parser/Latin.hs
@@ -565,7 +565,13 @@
 upcastWord64Result :: Result# e Word# -> Result# e Word64
 {-# inline upcastWord64Result #-}
 upcastWord64Result (# e | #) = (# e | #)
-upcastWord64Result (# | (# a, b, c #) #) = (# | (# W64# a, b, c #) #)
+upcastWord64Result (# | (# a, b, c #) #) = (# | (# W64# (
+#if MIN_VERSION_base(4,17,0)
+    Exts.wordToWord64# a
+#else
+    a
+#endif
+    ), b, c #) #)
 
 hexSmallWordMore ::
      e -- Error message
@@ -1030,7 +1036,14 @@
   (\x s0 -> case runParser (hexFixedWord64# e) x s0 of
     (# s1, r #) -> case r of
       (# err | #) -> (# s1, (# err | #) #)
-      (# | (# a, b, c #) #) -> (# s1, (# | (# W64# a, b, c #) #) #)
+      (# | (# a, b, c #) #) -> (# s1, (# | (# W64# (
+#if MIN_VERSION_base(4,17,0)
+          Exts.wordToWord64# a
+#else
+
+          a
+#endif
+          ), b, c #) #) #)
   )
 
 hexFixedWord64# :: e -> Parser e s Word#
