diff --git a/Data/Attoparsec/ByteString/FastSet.hs b/Data/Attoparsec/ByteString/FastSet.hs
--- a/Data/Attoparsec/ByteString/FastSet.hs
+++ b/Data/Attoparsec/ByteString/FastSet.hs
@@ -32,10 +32,10 @@
     , charClass
     ) where
 
-import Data.Bits ((.&.), (.|.))
+import Data.Bits ((.&.), (.|.), unsafeShiftL)
 import Foreign.Storable (peekByteOff, pokeByteOff)
-import GHC.Exts (Int(I#), iShiftRA#, narrow8Word#, shiftL#)
-import GHC.Word (Word8(W8#))
+import GHC.Exts (Int(I#), iShiftRA#)
+import GHC.Word (Word8)
 import qualified Data.ByteString as B
 import qualified Data.ByteString.Char8 as B8
 import qualified Data.ByteString.Internal as I
@@ -67,11 +67,8 @@
 shiftR :: Int -> Int -> Int
 shiftR (I# x#) (I# i#) = I# (x# `iShiftRA#` i#)
 
-shiftL :: Word8 -> Int -> Word8
-shiftL (W8# x#) (I# i#) = W8# (narrow8Word# (x# `shiftL#` i#))
-
 index :: Int -> I
-index i = I (i `shiftR` 3) (1 `shiftL` (i .&. 7))
+index i = I (i `shiftR` 3) (1 `unsafeShiftL` (i .&. 7))
 {-# INLINE index #-}
 
 -- | Check the set for membership.
diff --git a/attoparsec.cabal b/attoparsec.cabal
--- a/attoparsec.cabal
+++ b/attoparsec.cabal
@@ -1,5 +1,5 @@
 name:            attoparsec
-version:         0.14.1
+version:         0.14.2
 license:         BSD3
 license-file:    LICENSE
 category:        Text, Parsing
@@ -46,7 +46,7 @@
                  scientific >= 0.3.1 && < 0.4,
                  transformers >= 0.2 && (< 0.4 || >= 0.4.1.0) && < 0.6,
                  text >= 1.1.1.3,
-                 ghc-prim <0.8
+                 ghc-prim <0.9
   if impl(ghc < 7.4)
     build-depends:
       bytestring < 0.10.4.0
diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,7 @@
+0.14.2
+
+* Support for GHC 9.2.1
+
 0.14.1
 
 * Added `Data.Attoparsec.ByteString.getChunk`.
