diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,9 @@
+# 0.12.2
+
+- GHC 8.10.1 support
+
 # 0.12.0
+
 - GHC 8.8.1 support. Class type signatures were changed to remove explicit kind variables. This is to simplify the use of `TypeApplications` which changed with GHC 8.8.1 to require explicit application to those kind variables. Leaving them out of the class definitions preserves existing usage of `TypeApplications`. Thanks to Justin Le (@mstksg).
 
 # 0.11.0
diff --git a/Data/Vinyl/Lens.hs b/Data/Vinyl/Lens.hs
--- a/Data/Vinyl/Lens.hs
+++ b/Data/Vinyl/Lens.hs
@@ -11,6 +11,11 @@
 {-# LANGUAGE ScopedTypeVariables   #-}
 {-# LANGUAGE TypeFamilies          #-}
 {-# LANGUAGE TypeOperators         #-}
+{-# LANGUAGE CPP                   #-}
+#if __GLASGOW_HASKELL__ < 806
+{-# LANGUAGE TypeInType #-}
+#endif
+
 -- | Lenses into record fields.
 module Data.Vinyl.Lens
   ( RecElem(..)
@@ -32,6 +37,9 @@
 import Data.Vinyl.Core
 import Data.Vinyl.Functor
 import Data.Vinyl.TypeLevel
+#if __GLASGOW_HASKELL__ < 806
+import Data.Kind
+#endif
 
 -- | The presence of a field in a record is witnessed by a lens into
 -- its value.  The fifth parameter to 'RecElem', @i@, is there to help
@@ -176,7 +184,7 @@
 -- | A lens into a slice of the larger record. This is 'rsubsetC' with
 -- the type arguments reordered for more convenient usage with
 -- @TypeApplications@.
-rsubset :: forall rs ss f g record is.
+rsubset :: forall k rs ss f g record is.
            (RecSubset record (rs :: [k]) (ss :: [k]) is,
            Functor g, RecSubsetFCtx record f)
         => (record f rs -> g (record f rs)) -> record f ss -> g (record f ss)
diff --git a/Data/Vinyl/Recursive.hs b/Data/Vinyl/Recursive.hs
--- a/Data/Vinyl/Recursive.hs
+++ b/Data/Vinyl/Recursive.hs
@@ -6,11 +6,19 @@
 {-# LANGUAGE RankNTypes #-}
 {-# LANGUAGE ScopedTypeVariables #-}
 {-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE CPP #-}
+#if __GLASGOW_HASKELL__ < 806
+{-# LANGUAGE TypeInType #-}
+#endif
+
 -- | Recursive definitions of various core vinyl functions. These are
 -- simple definitions that put less strain on the compiler. They are
 -- expected to have slower run times, but faster compile times than
 -- the definitions in "Data.Vinyl.Core".
 module Data.Vinyl.Recursive where
+#if __GLASGOW_HASKELL__ < 806
+import Data.Kind
+#endif
 import Data.Proxy (Proxy(..))
 import Data.Vinyl.Core (rpure, RecApplicative, Rec(..), Dict(..))
 import Data.Vinyl.Functor (Compose(..), (:.), Lift(..), Const(..))
@@ -139,7 +147,7 @@
 
 -- | Build a record whose elements are derived solely from a
 -- constraint satisfied by each.
-rpureConstrained :: forall c (f :: u -> *) proxy ts.
+rpureConstrained :: forall u c (f :: u -> *) proxy ts.
                     (AllConstrained c ts, RecApplicative ts)
                  => proxy c -> (forall a. c a => f a) -> Rec f ts
 rpureConstrained _ f = go (rpure Proxy)
diff --git a/Data/Vinyl/SRec.hs b/Data/Vinyl/SRec.hs
--- a/Data/Vinyl/SRec.hs
+++ b/Data/Vinyl/SRec.hs
@@ -28,6 +28,7 @@
 {-# LANGUAGE AllowAmbiguousTypes #-}
 {-# LANGUAGE BangPatterns #-}
 {-# LANGUAGE ConstraintKinds #-}
+{-# LANGUAGE CPP #-}
 {-# LANGUAGE DataKinds #-}
 {-# LANGUAGE FlexibleContexts #-}
 {-# LANGUAGE FlexibleInstances #-}
@@ -44,6 +45,9 @@
 {-# LANGUAGE UnboxedTuples #-}
 {-# LANGUAGE UndecidableInstances #-}
 {-# LANGUAGE UndecidableSuperClasses #-}
+#if __GLASGOW_HASKELL__ < 806
+{-# LANGUAGE TypeInType #-}
+#endif
 
 -- We get warnings about incomplete patterns on various class
 -- instances.
@@ -60,6 +64,9 @@
   , peekField, pokeField
 ) where
 import Data.Coerce (coerce)
+#if __GLASGOW_HASKELL__ < 806
+import Data.Kind
+#endif
 import Data.Vinyl.Core
 import Data.Vinyl.Functor (Lift(..), Compose(..), type (:.), ElField)
 import Data.Vinyl.Lens (RecElem(..), RecSubset(..), type (⊆), RecElemFCtx)
@@ -219,7 +226,7 @@
       dst <$ copyBytes dst' src' n
 
 -- | Set a field.
-sput :: forall (f :: u -> *) (t :: u) (ts :: [u]).
+sput :: forall u (f :: u -> *) (t :: u) (ts :: [u]).
         ( FieldOffset f ts t
         , Storable (Rec f ts)
         , AllConstrained (FieldOffset f ts) ts)
@@ -296,7 +303,7 @@
   {-# INLINE rputC #-}
 
 -- | Get a subset of a record's fields.
-srecGetSubset :: forall (ss :: [u]) (rs :: [u]) (f :: u -> *).
+srecGetSubset :: forall u (ss :: [u]) (rs :: [u]) (f :: u -> *).
                  (RPureConstrained (FieldOffset f ss) rs,
                   RPureConstrained (FieldOffset f rs) rs,
                   RFoldMap rs, RMap rs, RApply rs,
@@ -334,7 +341,7 @@
 type Poker f = Lift (->) f TaggedIO
 
 -- | Set a subset of a record's fields.
-srecSetSubset :: forall (f :: u -> *) (ss :: [u]) (rs :: [u]).
+srecSetSubset :: forall u (f :: u -> *) (ss :: [u]) (rs :: [u]).
                  (rs ⊆ ss,
                   RPureConstrained (FieldOffset f ss) rs,
                   RPureConstrained (FieldOffset f rs) rs,
diff --git a/Data/Vinyl/Tutorial/Overview.hs b/Data/Vinyl/Tutorial/Overview.hs
--- a/Data/Vinyl/Tutorial/Overview.hs
+++ b/Data/Vinyl/Tutorial/Overview.hs
@@ -157,7 +157,7 @@
 The subtyping relationship between record types is expressed with the
 '<:' constraint; so, 'rcast' is of the following type:
 
-> rcast :: r1 <: r2 => Rec f r1 -> Rec f r2
+> rcast :: r1 <: r2 => Rec f r2 -> Rec f r1
 
 Also provided is a "≅" constraint which indicates record congruence
 (that is, two record types differ only in the order of their fields).
diff --git a/Data/Vinyl/TypeLevel.hs b/Data/Vinyl/TypeLevel.hs
--- a/Data/Vinyl/TypeLevel.hs
+++ b/Data/Vinyl/TypeLevel.hs
@@ -11,10 +11,21 @@
 {-# LANGUAGE TypeFamilies          #-}
 {-# LANGUAGE TypeFamilyDependencies #-}
 {-# LANGUAGE TypeOperators         #-}
+{-# LANGUAGE CPP                   #-}
+#if __GLASGOW_HASKELL__ < 806
+{-# LANGUAGE TypeInType #-}
+#endif
+#if __GLASGOW_HASKELL__ >= 810
+{-# LANGUAGE UndecidableInstances  #-}
+#endif
 
 module Data.Vinyl.TypeLevel where
 
+#if __GLASGOW_HASKELL__ < 806
+import Data.Kind
+#else
 import GHC.Exts
+#endif
 import GHC.Types (Type)
 
 -- | A mere approximation of the natural numbers. And their image as lifted by
diff --git a/tests/Intro.lhs b/tests/Intro.lhs
--- a/tests/Intro.lhs
+++ b/tests/Intro.lhs
@@ -21,6 +21,11 @@
 > {-# LANGUAGE FlexibleContexts, FlexibleInstances, NoMonomorphismRestriction #-}
 > {-# LANGUAGE GADTs, TypeSynonymInstances, TemplateHaskell, StandaloneDeriving #-}
 > {-# LANGUAGE TypeApplications #-}
+> {-# LANGUAGE CPP #-}
+#if __GLASGOW_HASKELL__ >= 810
+> {-# LANGUAGE StandaloneKindSignatures #-}
+#endif
+
 > module Intro where
 > import Data.Vinyl
 > import Data.Vinyl.Functor
diff --git a/vinyl.cabal b/vinyl.cabal
--- a/vinyl.cabal
+++ b/vinyl.cabal
@@ -1,5 +1,5 @@
 name:                vinyl
-version:             0.12.1
+version:             0.12.2
 synopsis:            Extensible Records
 -- description:
 license:             MIT
@@ -12,7 +12,7 @@
 build-type:          Simple
 cabal-version:       >=1.10
 extra-source-files:  CHANGELOG.md
-tested-with:         GHC == 8.4.4, GHC == 8.6.5, GHC == 8.8.2
+tested-with:         GHC == 8.4.4, GHC == 8.6.5, GHC == 8.8.3, GHC == 8.10.1
 
 description: Extensible records for Haskell with lenses.
 
@@ -38,7 +38,7 @@
                      , Data.Vinyl.Syntax
                      , Data.Vinyl.Tutorial.Overview
                      , Data.Vinyl.XRec
-  build-depends:       base >=4.7 && <= 5,
+  build-depends:       base >= 4.11 && <= 5,
                        ghc-prim,
                        array
   default-language:    Haskell2010
@@ -49,7 +49,7 @@
   type:             exitcode-stdio-1.0
   hs-source-dirs:   benchmarks
   main-is:          StorableBench.hs
-  build-depends:    base >= 4.7 && <= 5,
+  build-depends:    base,
                     vector,
                     criterion,
                     vinyl,
@@ -65,7 +65,7 @@
   type:             exitcode-stdio-1.0
   hs-source-dirs:   benchmarks
   main-is:          EqualityBench.hs
-  build-depends:    base >= 4.7 && <= 5, criterion, vinyl
+  build-depends:    base, criterion, vinyl
   ghc-options:      -O2
   default-language: Haskell2010
 
@@ -73,7 +73,7 @@
   type:             exitcode-stdio-1.0
   hs-source-dirs:   benchmarks
   main-is:          AccessorsBench.hs
-  build-depends:    base >= 4.7 && <= 5, criterion, tagged, vinyl, microlens
+  build-depends:    base, criterion, tagged, vinyl, microlens
   ghc-options:      -O2
   default-language: Haskell2010
 
@@ -81,7 +81,7 @@
   type:             exitcode-stdio-1.0
   hs-source-dirs:   benchmarks
   main-is:          AsABench.hs
-  build-depends:    base >= 4.7 && <= 5, criterion, vinyl
+  build-depends:    base, criterion, vinyl
   ghc-options:      -O2
   default-language: Haskell2010
 
@@ -90,14 +90,14 @@
   hs-source-dirs:   tests
   other-modules:    Intro
   main-is:          doctests.hs
-  build-depends:    base >= 4.7 && <= 5, lens, doctest >= 0.8, singletons >= 0.10, vinyl
+  build-depends:    base, lens, doctest >= 0.8, singletons >= 0.10, vinyl
   default-language: Haskell2010
 
 test-suite aeson
   type:             exitcode-stdio-1.0
   hs-source-dirs:   tests
   main-is:          Aeson.hs
-  build-depends:    base >= 4.7 && <= 5, hspec, aeson, text, mtl, vinyl,
+  build-depends:    base, hspec, aeson, text, mtl, vinyl,
                     vector, unordered-containers, lens, lens-aeson
   default-language: Haskell2010
 
