diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# 0.5.0.1 (2020-03-29)
+
+* Compatiblity with GHC-8.10 (thanks to Ryan Scott).
+
 # 0.5.0.0 (2019-05-09)
 
 * Add `ejections` that computes a product of functions
diff --git a/sop-core.cabal b/sop-core.cabal
--- a/sop-core.cabal
+++ b/sop-core.cabal
@@ -1,5 +1,5 @@
 name:                sop-core
-version:             0.5.0.0
+version:             0.5.0.1
 synopsis:            True Sums of Products
 description:
   Implementation of n-ary sums and n-ary products.
@@ -25,7 +25,7 @@
 build-type:          Simple
 cabal-version:       >=1.10
 extra-source-files:  CHANGELOG.md doctest.sh
-tested-with:         GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.5
+tested-with:         GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.5, GHC == 8.8.2, GHC == 8.10.1
 
 source-repository head
   type:                git
@@ -41,7 +41,7 @@
                        Data.SOP.NP
                        Data.SOP.NS
                        Data.SOP.Sing
-  build-depends:       base                 >= 4.9  && < 5,
+  build-depends:       base                 >= 4.9  && < 4.15,
                        deepseq              >= 1.3  && < 1.5
   hs-source-dirs:      src
   default-language:    Haskell2010
@@ -64,7 +64,10 @@
                        KindSignatures
                        DataKinds
                        FunctionalDependencies
-                       AutoDeriveTypeable
+
+  if impl(ghc <8.2)
+    default-extensions: AutoDeriveTypeable
+
   -- if impl(ghc >= 8.6)
   --   default-extensions: NoStarIsType
   other-extensions:    PolyKinds
diff --git a/src/Data/SOP/BasicFunctors.hs b/src/Data/SOP/BasicFunctors.hs
--- a/src/Data/SOP/BasicFunctors.hs
+++ b/src/Data/SOP/BasicFunctors.hs
@@ -43,7 +43,9 @@
   , mapKKK
   ) where
 
+#if !MIN_VERSION_base(4,11,0)
 import Data.Semigroup (Semigroup (..))
+#endif
 import Data.Kind (Type)
 import qualified GHC.Generics as GHC
 
diff --git a/src/Data/SOP/Classes.hs b/src/Data/SOP/Classes.hs
--- a/src/Data/SOP/Classes.hs
+++ b/src/Data/SOP/Classes.hs
@@ -653,7 +653,7 @@
   -- @since 0.3.1.0
   --
   hcoerce ::
-       (AllZipN (Prod h1) (LiftedCoercible f g) xs ys, HTrans h1 h2)
+       AllZipN (Prod h1) (LiftedCoercible f g) xs ys
     => h1 f xs -> h2 g ys
 
 -- | Specialization of 'hcoerce'.
diff --git a/src/Data/SOP/Dict.hs b/src/Data/SOP/Dict.hs
--- a/src/Data/SOP/Dict.hs
+++ b/src/Data/SOP/Dict.hs
@@ -68,7 +68,7 @@
 mapAll2 :: forall c d xss .
            (forall a . Dict c a -> Dict d a)
         -> Dict (All2 c) xss -> Dict (All2 d) xss
-mapAll2 f d @ Dict = (all2 . mapAll (mapAll f) . unAll2) d
+mapAll2 f d@Dict = (all2 . mapAll (mapAll f) . unAll2) d
 
 -- | If two constraints 'c' and 'd' hold over a type-level
 -- list 'xs', then the combination of both constraints holds
@@ -77,7 +77,7 @@
 -- @since 0.2
 --
 zipAll :: Dict (All c) xs -> Dict (All d) xs -> Dict (All (c `And` d)) xs
-zipAll dc @ Dict dd = all_NP (hzipWith (\ Dict Dict -> Dict) (unAll_NP dc) (unAll_NP dd))
+zipAll dc@Dict dd = all_NP (hzipWith (\ Dict Dict -> Dict) (unAll_NP dc) (unAll_NP dd))
 
 -- | If two constraints 'c' and 'd' hold over a type-level
 -- list of lists 'xss', then the combination of both constraints
diff --git a/src/Data/SOP/NP.hs b/src/Data/SOP/NP.hs
--- a/src/Data/SOP/NP.hs
+++ b/src/Data/SOP/NP.hs
@@ -91,7 +91,9 @@
 import Data.Kind (Type)
 import Data.Proxy (Proxy(..))
 import Unsafe.Coerce
+#if !MIN_VERSION_base(4,11,0)
 import Data.Semigroup (Semigroup (..))
+#endif
 
 import Control.DeepSeq (NFData(..))
 
diff --git a/src/Data/SOP/Sing.hs b/src/Data/SOP/Sing.hs
--- a/src/Data/SOP/Sing.hs
+++ b/src/Data/SOP/Sing.hs
@@ -1,4 +1,9 @@
 {-# LANGUAGE PolyKinds, StandaloneDeriving #-}
+#if __GLASGOW_HASKELL__ < 806
+-- Before GHC 8.6, TypeInType was required to explicitly quantify kind variables.
+-- After GHC 8.6, this feature was incorporated into PolyKinds.
+{-# LANGUAGE TypeInType #-}
+#endif
 -- | Singleton types corresponding to type-level data structures.
 --
 -- The implementation is similar, but subtly different to that of the
@@ -93,7 +98,7 @@
 deriving instance Ord  (Shape xs)
 
 -- | The shape of a type-level list.
-shape :: forall (xs :: [k]). SListI xs => Shape xs
+shape :: forall k (xs :: [k]). SListI xs => Shape xs
 shape = case sList :: SList xs of
           SNil  -> ShapeNil
           SCons -> ShapeCons shape
@@ -102,7 +107,7 @@
 --
 -- @since 0.2
 --
-lengthSList :: forall (xs :: [k]) proxy. SListI xs => proxy xs -> Int
+lengthSList :: forall k (xs :: [k]) proxy. SListI xs => proxy xs -> Int
 lengthSList _ = lengthShape (shape :: Shape xs)
   where
     lengthShape :: forall xs'. Shape xs' -> Int
