diff --git a/data-serializer.cabal b/data-serializer.cabal
--- a/data-serializer.cabal
+++ b/data-serializer.cabal
@@ -1,5 +1,5 @@
 Name: data-serializer
-Version: 0.3.4.1
+Version: 0.3.5
 Category: Data
 Stability: experimental
 Synopsis: Common API for serialization libraries
@@ -21,7 +21,7 @@
   README.md
 
 Tested-With: GHC==7.10.3, GHC==8.0.2, GHC==8.2.2, GHC==8.4.4, GHC==8.6.5,
-             GHC==8.8.1
+             GHC==8.8.4, GHC==8.10.4, GHC==9.0.1
 
 Cabal-Version: >= 1.10.0
 Build-Type: Simple
@@ -33,13 +33,14 @@
 Library
   Default-Language: Haskell2010
   Build-Depends: base >= 4.8 && < 5
-               , semigroups >= 0.18.2
                , bytestring >= 0.10.4
                , binary >= 0.7.2
                , cereal >= 0.4.1
                , data-endian >= 0.1.1
                , parsers >= 0.12.3
                , split >= 0.2
+  if impl(ghc < 8.0)
+    Build-Depends: semigroups >= 0.18.2
   Hs-Source-Dirs: src
   GHC-Options: -Wall
   Exposed-Modules:
diff --git a/src/Data/Deserializer.hs b/src/Data/Deserializer.hs
--- a/src/Data/Deserializer.hs
+++ b/src/Data/Deserializer.hs
@@ -637,17 +637,18 @@
 -- | Force the default byte order.
 deserializeIn ∷ Deserializer μ
               ⇒ Endian → (∀ μ' . (Deserializer μ') ⇒ μ' α) → μ α
-deserializeIn LittleEndian = deserializeL
-deserializeIn BigEndian    = deserializeB
+deserializeIn LittleEndian d = deserializeL d
+deserializeIn BigEndian    d = deserializeB d
 {-# INLINE deserializeIn #-}
 
 -- | Force the default byte order to be the host byte order.
 deserializeH ∷ Deserializer μ ⇒ (∀ μ' . (Deserializer μ') ⇒ μ' α) → μ α
 #ifdef WORDS_BIGENDIAN
-deserializeH = deserializeB
+deserializeH d = deserializeB d
 #else
-deserializeH = deserializeL
+deserializeH d = deserializeL d
 #endif
+{-# INLINE deserializeH #-}
 
 -- | Deserialization result.
 data Deserialized α = Deserialized α
diff --git a/src/Data/Serializer.hs b/src/Data/Serializer.hs
--- a/src/Data/Serializer.hs
+++ b/src/Data/Serializer.hs
@@ -64,8 +64,10 @@
 import Data.Typeable (Typeable)
 import Data.Data (Data)
 import Data.Proxy (Proxy(..))
+#if !MIN_VERSION_base(4,13,0)
 import Data.Semigroup (Semigroup, (<>))
 import Data.Monoid (Monoid)
+#endif
 import Data.Endian (Endian(..), swapEndian)
 import Data.Word
 import Data.Int
@@ -576,16 +578,16 @@
 
 -- | Force the default byte order.
 serializeIn ∷ Serializer s ⇒ Endian → (∀ s' . (Serializer s') ⇒ s') → s
-serializeIn LittleEndian = serializeL
-serializeIn BigEndian    = serializeB
+serializeIn LittleEndian s = serializeL s
+serializeIn BigEndian    s = serializeB s
 {-# INLINE serializeIn #-}
 
 -- | Force the default byte order to be the host byte order.
 serializeH ∷ Serializer s ⇒ (∀ s' . (Serializer s') ⇒ s') → s
 #ifdef WORDS_BIGENDIAN
-serializeH = serializeB
+serializeH s = serializeB s
 #else
-serializeH = serializeL
+serializeH s = serializeL s
 #endif
 {-# INLINE serializeH #-}
 
