diff --git a/CHANGES.md b/CHANGES.md
--- a/CHANGES.md
+++ b/CHANGES.md
@@ -1,3 +1,9 @@
+0.4.2.0 (2022-10-12)
+=====================
+
+-   Support GHC 9.4. (#50)
+
+
 0.4.1.2 (2021-12-14)
 =====================
 
diff --git a/pinch.cabal b/pinch.cabal
--- a/pinch.cabal
+++ b/pinch.cabal
@@ -1,11 +1,11 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.34.6.
+-- This file has been generated from package.yaml by hpack version 0.35.0.
 --
 -- see: https://github.com/sol/hpack
 
 name:           pinch
-version:        0.4.1.2
+version:        0.4.2.0
 synopsis:       An alternative implementation of Thrift for Haskell.
 description:    This library provides machinery for types to specify how they can be
                 serialized and deserialized into/from Thrift payloads. It makes no
@@ -80,10 +80,10 @@
     , containers >=0.5 && <0.7
     , deepseq >=1.3 && <1.5
     , ghc-prim
-    , hashable >=1.2 && <1.4
+    , hashable >=1.2 && <1.5
     , network >=3.1.2.0 && <3.2
     , semigroups >=0.18 && <0.21
-    , text ==1.2.*
+    , text >=1.2 && <1.3 || >=2.0
     , unordered-containers ==0.2.*
     , vector >=0.10 && <0.13
   default-language: Haskell2010
@@ -124,7 +124,7 @@
     , network-run >=0.2.4 && <0.3
     , pinch
     , semigroups >=0.18 && <0.21
-    , text ==1.2.*
+    , text >=1.2 && <1.3 || >=2.0
     , unordered-containers ==0.2.*
     , vector >=0.10 && <0.13
   default-language: Haskell2010
diff --git a/src/Pinch/Internal/Bits.hs b/src/Pinch/Internal/Bits.hs
--- a/src/Pinch/Internal/Bits.hs
+++ b/src/Pinch/Internal/Bits.hs
@@ -23,7 +23,11 @@
     uncheckedShiftLWord16#,
     uncheckedShiftLWord32#,
 #endif
+#if MIN_VERSION_ghc_prim(0,9,0)
+    uncheckedShiftL64#,
+#else
     uncheckedShiftL#,
+#endif
     )
 import GHC.Word (Word16 (..), Word32 (..), Word64 (..))
 #else
@@ -50,7 +54,13 @@
 w16ShiftL (W16# w) (I# i) = W16# (w `uncheckedShiftL#` i)
 w32ShiftL (W32# w) (I# i) = W32# (w `uncheckedShiftL#` i)
 #endif
+
+#if MIN_VERSION_ghc_prim(0,9,0)
+w64ShiftL (W64# w) (I# i) = W64# (w `uncheckedShiftL64#` i)
+#else
 w64ShiftL (W64# w) (I# i) = W64# (w `uncheckedShiftL#` i)
+#endif
+
 #else
 w16ShiftL = shiftL
 w32ShiftL = shiftL
