diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+## 1.3.1 (2024-07-15)
+* fix building on GHC 9.8 and probably 9.10
+
 ## 1.3.0 (2024-04-13)
 * move type-level byte stuff to another package
 
diff --git a/bytezap.cabal b/bytezap.cabal
--- a/bytezap.cabal
+++ b/bytezap.cabal
@@ -5,7 +5,7 @@
 -- see: https://github.com/sol/hpack
 
 name:           bytezap
-version:        1.3.0
+version:        1.3.1
 synopsis:       Bytestring builder with zero intermediate allocation
 description:    Please see README.md.
 category:       Data, Serialization, Generics
@@ -76,5 +76,5 @@
     , generic-type-functions >=0.1.0 && <0.2
     , primitive >=0.8.0.0 && <0.10.0.0
     , text >=2.0.2 && <2.2
-    , type-level-bytestrings >=0.1.0 && <0.2
+    , type-level-bytestrings >=0.1.0 && <0.3
   default-language: GHC2021
diff --git a/src/Bytezap/Parser/Struct/TypeLits/Bytes.hs b/src/Bytezap/Parser/Struct/TypeLits/Bytes.hs
--- a/src/Bytezap/Parser/Struct/TypeLits/Bytes.hs
+++ b/src/Bytezap/Parser/Struct/TypeLits/Bytes.hs
@@ -11,9 +11,10 @@
 import Data.Type.Byte
 import Bytezap.Parser.Struct ( ParserT, prim, withLit, constParse )
 import Numeric.Natural ( Natural )
+import Data.Void ( Void )
 
 class ParseReifyBytesW64 (ns :: [Natural]) where
-    parseReifyBytesW64 :: ParserT st e ()
+    parseReifyBytesW64 :: ParserT st Void ()
 
 -- | Enough bytes to make a 'Word64'.
 instance {-# OVERLAPPING #-}
diff --git a/src/Bytezap/Struct.hs b/src/Bytezap/Struct.hs
--- a/src/Bytezap/Struct.hs
+++ b/src/Bytezap/Struct.hs
@@ -23,6 +23,7 @@
 module Bytezap.Struct where
 
 import GHC.Exts
+import Raehik.Compat.GHC.Exts.GHC908MemcpyPrimops ( setAddrRange# )
 import Raehik.Compat.Data.Primitive.Types
 
 import Control.Monad.Primitive ( MonadPrim, primitive )
@@ -31,7 +32,6 @@
 import Data.ByteString.Internal qualified as BS
 
 import GHC.Word ( Word8(W8#) )
-import Raehik.Compat.GHC.Exts.GHC908MemcpyPrimops ( setAddrRange# )
 
 -- | A struct poker: base address (constant), byte offset, state token.
 --
diff --git a/src/Raehik/Compat/GHC/Exts/GHC908MemcpyPrimops.hs b/src/Raehik/Compat/GHC/Exts/GHC908MemcpyPrimops.hs
--- a/src/Raehik/Compat/GHC/Exts/GHC908MemcpyPrimops.hs
+++ b/src/Raehik/Compat/GHC/Exts/GHC908MemcpyPrimops.hs
@@ -1,8 +1,22 @@
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE UnboxedTuples #-}
 
-module Raehik.Compat.GHC.Exts.GHC908MemcpyPrimops where
+-- On supported GHCs, we simply re-export. This means unused import warnings.
+-- Sorry idk how to fix that.
 
+module Raehik.Compat.GHC.Exts.GHC908MemcpyPrimops
+  ( copyAddrToAddrNonOverlapping#
+  , setAddrRange#
+  ) where
+
 import GHC.Exts
+
+#if MIN_VERSION_base(4,19,0)
+
+-- These should all be imported from GHC.Exts, so above is simply re-exporting.
+
+#else
+
 import GHC.IO ( unIO )
 import Foreign.Marshal.Utils ( copyBytes, fillBytes )
 
@@ -17,3 +31,5 @@
 setAddrRange# dest# w# len# s0 =
     case unIO (fillBytes (Ptr dest#) (fromIntegral (I# w#)) (I# len#)) s0 of
       (# s1, () #) -> s1
+
+#endif
diff --git a/src/Raehik/Compat/GHC/Exts/GHC910UnalignedAddrPrimops.hs b/src/Raehik/Compat/GHC/Exts/GHC910UnalignedAddrPrimops.hs
--- a/src/Raehik/Compat/GHC/Exts/GHC910UnalignedAddrPrimops.hs
+++ b/src/Raehik/Compat/GHC/Exts/GHC910UnalignedAddrPrimops.hs
@@ -1,3 +1,6 @@
+{-# LANGUAGE CPP #-}
+{-# LANGUAGE UnboxedTuples #-}
+
 {-
 (index|read|write)<ty>OffAddr# primops fail when unaligned on platforms not
 supporting unaligned accesses. GHC 9.10 introduces new primops that handle
@@ -9,20 +12,45 @@
 non-GC-managed.
 
 Import this module unqualified along with 'GHC.Exts' .
+
+On supported GHCs, we simply re-export. This means unused import warnings.
+Sorry idk how to fix that.
 -}
 
-{-# LANGUAGE CPP #-}
-{-# LANGUAGE UnboxedTuples #-}
+module Raehik.Compat.GHC.Exts.GHC910UnalignedAddrPrimops
+  ( indexWord8OffAddrAsWord16#
+  , indexWord8OffAddrAsWord32#
+  , indexWord8OffAddrAsWord64#
+  , indexWord8OffAddrAsWord#
+  , indexWord8OffAddrAsInt16#
+  , indexWord8OffAddrAsInt32#
+  , indexWord8OffAddrAsInt64#
+  , indexWord8OffAddrAsInt#
+  , readWord8OffAddrAsWord16#
+  , readWord8OffAddrAsWord32#
+  , readWord8OffAddrAsWord64#
+  , readWord8OffAddrAsWord#
+  , readWord8OffAddrAsInt16#
+  , readWord8OffAddrAsInt32#
+  , readWord8OffAddrAsInt64#
+  , readWord8OffAddrAsInt#
+  , writeWord8OffAddrAsWord16#
+  , writeWord8OffAddrAsWord32#
+  , writeWord8OffAddrAsWord64#
+  , writeWord8OffAddrAsWord#
+  , writeWord8OffAddrAsInt16#
+  , writeWord8OffAddrAsInt32#
+  , writeWord8OffAddrAsInt64#
+  , writeWord8OffAddrAsInt#
+  ) where
 
-module Raehik.Compat.GHC.Exts.GHC910UnalignedAddrPrimops where
+import GHC.Exts
 
 #if MIN_VERSION_base(4,20,0)
 
--- These should be in base-4.20.0.0.
+-- These should all be imported from GHC.Exts, so above is simply re-exporting.
 
 #else
-
-import GHC.Exts
 
 indexWord8OffAddrAsWord16# :: Addr# -> Int# -> Word16#
 indexWord8OffAddrAsWord16# addr# os# =
