diff --git a/ChangeLog.md b/ChangeLog.md
--- a/ChangeLog.md
+++ b/ChangeLog.md
@@ -1,5 +1,9 @@
 # Changelog for inline-asm
 
+## v0.5.0.1
+
+* GHC 9.2 compatibility.
+
 ## v0.5.0.0
 
 * Add `defineAsmFunM` for impure assembly functions (think `rdtsc`) that shall live in a `PrimMonad`.
diff --git a/inline-asm.cabal b/inline-asm.cabal
--- a/inline-asm.cabal
+++ b/inline-asm.cabal
@@ -4,10 +4,10 @@
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: c88df95b319282f818dabe35ff5bf3c7d2c92cfefebc2957b6e522e25338e44d
+-- hash: 0ba4305bbb1fd0e42473bdc9159b5a24f4b74229ff868ae87110529fdf4590b6
 
 name:           inline-asm
-version:        0.5.0.0
+version:        0.5.0.1
 synopsis:       Inline some Assembly in ur Haskell!
 description:    Please see the README on GitHub at <https://github.com/0xd34df00d/inline-asm#readme>
 category:       FFI
diff --git a/src/Language/Asm/Inline.hs b/src/Language/Asm/Inline.hs
--- a/src/Language/Asm/Inline.hs
+++ b/src/Language/Asm/Inline.hs
@@ -30,73 +30,89 @@
 import Language.Asm.Inline.AsmCode
 import Language.Asm.Inline.Util
 
-class AsmArg a (rep :: RuntimeRep) (unboxedTy :: TYPE rep) | a -> rep, a -> unboxedTy where
+class AsmArg a (unboxedTy :: TYPE rep) | a -> unboxedTy where
   unbox :: a -> unboxedTy
   rebox :: unboxedTy -> a
 
 data Unit = Unit
 
-instance AsmArg Unit 'IntRep Int# where
+#if MIN_VERSION_GLASGOW_HASKELL(9,2,0,0)
+type Int8Rep# = Int8#
+type Int16Rep# = Int16#
+type Int32Rep# = Int32#
+type Word8Rep# = Word8#
+type Word16Rep# = Word16#
+type Word32Rep# = Word32#
+#else
+type Int8Rep# = Int#
+type Int16Rep# = Int#
+type Int32Rep# = Int#
+type Word8Rep# = Word#
+type Word16Rep# = Word#
+type Word32Rep# = Word#
+#endif
+
+instance AsmArg Unit Int# where
   unbox _ = 0#
   rebox _ = Unit
 
-instance AsmArg Int 'IntRep Int# where
+instance AsmArg Int Int# where
   unbox (I# w) = w
   rebox = I#
 
-instance AsmArg Int8 'IntRep Int# where
+instance AsmArg Int8 Int8Rep# where
   unbox (I8# w) = w
   rebox = I8#
 
-instance AsmArg Int16 'IntRep Int# where
+instance AsmArg Int16 Int16Rep# where
   unbox (I16# w) = w
   rebox = I16#
 
-instance AsmArg Int32 'IntRep Int# where
+instance AsmArg Int32 Int32Rep# where
   unbox (I32# w) = w
   rebox = I32#
 
 #if WORD_SIZE_IN_BITS > 32
-instance AsmArg Int64 'IntRep Int# where
+instance AsmArg Int64 Int# where
 #else
-instance AsmArg Int64 'Int64Rep Int64# where
+instance AsmArg Int64 Int64# where
 #endif
   unbox (I64# w) = w
   rebox = I64#
 
-instance AsmArg Word 'WordRep Word# where
+instance AsmArg Word Word# where
   unbox (W# w) = w
   rebox = W#
 
-instance AsmArg Word8 'WordRep Word# where
+instance AsmArg Word8 Word8Rep# where
   unbox (W8# w) = w
   rebox = W8#
 
-instance AsmArg Word16 'WordRep Word# where
+instance AsmArg Word16 Word16Rep# where
   unbox (W16# w) = w
   rebox = W16#
 
-instance AsmArg Word32 'WordRep Word# where
+instance AsmArg Word32 Word32Rep# where
   unbox (W32# w) = w
   rebox = W32#
 
 #if WORD_SIZE_IN_BITS > 32
-instance AsmArg Word64 'WordRep Word# where
+instance AsmArg Word64 Word# where
 #else
-instance AsmArg Word64 'Word64Rep Word64# where
+instance AsmArg Word64 Word64# where
 #endif
   unbox (W64# w) = w
   rebox = W64#
 
-instance AsmArg Double 'DoubleRep Double# where
+instance AsmArg Double Double# where
   unbox (D# d) = d
   rebox = D#
 
-instance AsmArg Float 'FloatRep Float# where
+instance AsmArg Float Float# where
   unbox (F# f) = f
   rebox = F#
 
-instance AsmArg (Ptr a) 'AddrRep Addr# where
+instance AsmArg (Ptr a) Addr# where
   unbox (Ptr p) = p
   rebox = Ptr
 
@@ -139,13 +155,21 @@
 defineAsmFunM :: AsmCode tyAnn code => String -> tyAnn -> code -> Q [Dec]
 defineAsmFunM = defineAsmFunImpl Monadic
 
+#if MIN_VERSION_template_haskell(2, 18, 0)
+mkPlainTV :: Name -> TyVarBndr Specificity
+mkPlainTV n = PlainTV n SpecifiedSpec
+#else
+mkPlainTV :: Name -> TyVarBndr
+mkPlainTV = PlainTV
+#endif
+
 -- |Converts the wrapped function type to live in a 'PrimMonad':
 -- given 'Ty1 -> Ty2 -> Ret' it produces
 -- 'forall m. PrimMonad m => Ty1 -> Ty2 -> m Ret'.
 stateifyLifted :: Type -> Q Type
 stateifyLifted ty = do
   m <- newName "m"
-  ForallT [PlainTV m] [AppT (ConT ''PrimMonad) (VarT m)] <$> go m ty
+  ForallT [mkPlainTV m] [AppT (ConT ''PrimMonad) (VarT m)] <$> go m ty
   where
     go m (AppT (AppT ArrowT lhs) rhs) = AppT (AppT ArrowT lhs) <$> go m rhs
     go m rhs = [t| $(pure $ VarT m) $(pure rhs) |]
@@ -156,7 +180,7 @@
 stateifyUnlifted :: Type -> Q Type
 stateifyUnlifted ty = do
   s <- newName "s"
-  ForallT [PlainTV s] [] <$> go s ty
+  ForallT [mkPlainTV s] [] <$> go s ty
   where
     go s (AppT (AppT ArrowT lhs) rhs) = AppT (AppT ArrowT lhs) <$> go s rhs
     go s rhs = [t| State# $(pure $ VarT s) -> (# State# $(pure $ VarT s), $(pure rhs) #) |]
@@ -210,12 +234,25 @@
            . transformBi unliftPtrs
            . transformBi unliftBS
   where
-    unliftBaseTy x | x `elem` [ ''Word, ''Word8, ''Word16, ''Word32, ''Word64 ] = ''Word#
-                   | x `elem` [ ''Int, ''Int8, ''Int16, ''Int32, ''Int64 ] = ''Int#
-                   | x == ''Double = ''Double#
-                   | x == ''Float = ''Float#
-                   | x == ''Unit = ''Int#
-                   | otherwise = x
+    unliftBaseTy x
+#if MIN_VERSION_GLASGOW_HASKELL(9,2,0,0)
+      | x == ''Word || x == ''Word64 = ''Word#
+      | x == ''Word8 = ''Word8#
+      | x == ''Word16 = ''Word16#
+      | x == ''Word32 = ''Word32#
+
+      | x == ''Int || x == ''Int64 = ''Int#
+      | x == ''Int8 = ''Int8#
+      | x == ''Int16 = ''Int16#
+      | x == ''Int32 = ''Int32#
+#else
+      | x `elem` [ ''Word, ''Word8, ''Word16, ''Word32, ''Word64 ] = ''Word#
+      | x `elem` [ ''Int, ''Int8, ''Int16, ''Int32, ''Int64 ] = ''Int#
+#endif
+      | x == ''Double = ''Double#
+      | x == ''Float = ''Float#
+      | x == ''Unit = ''Int#
+      | otherwise = x
 
     unliftPtrs (AppT (ConT name) _) | name == ''Ptr = ConT ''Addr#
     unliftPtrs x = x
