diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,6 +1,18 @@
 Changelog
 =========
 
+Version 0.2.6.5
+---------------
+
+*July 23, 2023*
+
+<https://github.com/mstksg/backprop/releases/tag/v0.2.6.5>
+
+*   vinyl-0.14 compatibility (@msakai), which can be disabled via cabal flag
+*   GHC 9.0+ compatibility (@msakai)
+
+Thanks to all generous contributors and commenters!
+
 Version 0.2.6.4
 ---------------
 
diff --git a/LICENSE b/LICENSE
--- a/LICENSE
+++ b/LICENSE
@@ -1,4 +1,4 @@
-Copyright Justin Le (c) 2018
+Copyright Justin Le (c) 2020
 
 All rights reserved.
 
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -183,7 +183,7 @@
 
 [bench]: https://github.com/mstksg/backprop/blob/master/bench/bench.hs
 
-![benchmarks](https://i.imgur.com/7L5NV4P.png)
+![benchmarks](https://i.imgur.com/rLUx4x4.png)
 
 Here we compare:
 
diff --git a/backprop.cabal b/backprop.cabal
--- a/backprop.cabal
+++ b/backprop.cabal
@@ -1,13 +1,13 @@
 cabal-version: 1.12
 
--- This file has been generated from package.yaml by hpack version 0.33.0.
+-- This file has been generated from package.yaml by hpack version 0.35.2.
 --
 -- see: https://github.com/sol/hpack
 --
--- hash: 906559ac274a6fd89fe27484a5a3a192f5a009fc5317c1fd3546168b5ba7b927
+-- hash: b1229ff8088fce05c68ad20c4c853349f1b30d0f9e19aa5b2c594a833b05790a
 
 name:           backprop
-version:        0.2.6.4
+version:        0.2.6.5
 synopsis:       Heterogeneous automatic differentation
 description:    Write your functions to compute your result, and the library will
                 automatically generate functions to compute your gradient.
@@ -24,7 +24,8 @@
 copyright:      (c) Justin Le 2018
 license:        BSD3
 license-file:   LICENSE
-tested-with:    GHC >= 8.4
+tested-with:
+    GHC >= 8.4
 build-type:     Simple
 extra-source-files:
     README.md
@@ -51,6 +52,10 @@
   type: git
   location: https://github.com/mstksg/backprop
 
+flag vinyl_0_14
+  manual: False
+  default: True
+
 library
   exposed-modules:
       Numeric.Backprop
@@ -78,6 +83,12 @@
     , vector
     , vinyl >=0.9.1
   default-language: Haskell2010
+  if flag(vinyl_0_14)
+    build-depends:
+        vinyl >=0.14.2
+  else
+    build-depends:
+        vinyl <0.14
 
 benchmark backprop-mnist-bench
   type: exitcode-stdio-1.0
diff --git a/doc/07-performance.md b/doc/07-performance.md
--- a/doc/07-performance.md
+++ b/doc/07-performance.md
@@ -33,7 +33,7 @@
 
 [bench]: https://github.com/mstksg/backprop/blob/master/bench/bench.hs
 
-![benchmarks](https://i.imgur.com/7L5NV4P.png)
+![benchmarks](https://i.imgur.com/rLUx4x4.png)
 
 In the above, we compare:
 
@@ -73,8 +73,8 @@
 [Wengert tape]: https://dl.acm.org/citation.cfm?doid=355586.364791
 
 In addition, usage of the "Higher-Kinded Data"-based pattern matching interface
-(over the lens-based accessor interface) incurs some penalties from the
-inefficient nature of GHC Generics in general.
+(over the lens-based accessor interface) seems to result in more efficient
+compiled code, but not by any significant amount.
 
 Optimization Techniques
 -----------------------
diff --git a/src/Data/Type/Util.hs b/src/Data/Type/Util.hs
--- a/src/Data/Type/Util.hs
+++ b/src/Data/Type/Util.hs
@@ -72,7 +72,7 @@
     -> (forall n. VecT n f a -> r)
     -> r
 withVec = \case
-    []   -> ($ VNil)
+    []   -> \f -> f VNil
     x:xs -> \f -> withVec xs (f . (x :*))
 {-# INLINE withVec #-}
 
diff --git a/src/Numeric/Backprop.hs b/src/Numeric/Backprop.hs
--- a/src/Numeric/Backprop.hs
+++ b/src/Numeric/Backprop.hs
@@ -8,7 +8,7 @@
 
 -- |
 -- Module      : Numeric.Backprop
--- Copyright   : (c) Justin Le 2018
+-- Copyright   : (c) Justin Le 2023
 -- License     : BSD3
 --
 -- Maintainer  : justin@jle.im
@@ -33,7 +33,7 @@
 -- Then, you can use:
 --
 -- @
--- 'evalBP' :: (forall s. 'Reifies' s 'W'. 'BVar' s a -> BVar s b) -> (a -> b)
+-- 'evalBP' :: (forall s. 'Reifies' s 'W' => 'BVar' s a -> BVar s b) -> (a -> b)
 -- @
 --
 -- to turn a 'BVar' function into the function on actual values @a -> b@.
@@ -43,7 +43,7 @@
 -- Then, there's:
 --
 -- @
--- 'gradBP' :: (forall s. 'Reifies' s 'W'. 'BVar' s a -> BVar s b) -> (a -> a)
+-- 'gradBP' :: (forall s. 'Reifies' s 'W' => 'BVar' s a -> BVar s b) -> (a -> a)
 -- @
 --
 -- to automatically get the /gradient/, as well, for a given input.
diff --git a/src/Numeric/Backprop/Class.hs b/src/Numeric/Backprop/Class.hs
--- a/src/Numeric/Backprop/Class.hs
+++ b/src/Numeric/Backprop/Class.hs
@@ -1,4 +1,5 @@
 {-# LANGUAGE BangPatterns               #-}
+{-# LANGUAGE CPP                        #-}
 {-# LANGUAGE DataKinds                  #-}
 {-# LANGUAGE DefaultSignatures          #-}
 {-# LANGUAGE DeriveDataTypeable         #-}
@@ -19,7 +20,7 @@
 
 -- |
 -- Module      : Numeric.Backprop.Class
--- Copyright   : (c) Justin Le 2018
+-- Copyright   : (c) Justin Le 2023
 -- License     : BSD3
 --
 -- Maintainer  : justin@jle.im
@@ -901,11 +902,13 @@
     add  = coerce (add @a)
     one  = coerce (one @a)
 
+#if !MIN_VERSION_base(4,16,0)
 -- | @since 0.2.2.0
 instance Backprop a => Backprop (SG.Option a) where
     zero = coerce (zero @(Maybe a))
     add  = coerce (add @(Maybe a))
     one  = coerce (one @(Maybe a))
+#endif
 
 -- | @since 0.2.2.0
 instance Backprop a => Backprop (SG.First a) where
@@ -983,7 +986,11 @@
     {-# INLINE one #-}
 
 -- | @since 0.2.6.3
+#if MIN_VERSION_vinyl(0,14,2)
+instance (ReifyConstraint Backprop f rs, RMap rs, RApply rs, RecApplicative rs, NatToInt (RLength rs), RPureConstrained (IndexableField rs) rs, ToARec rs)
+#else
 instance (ReifyConstraint Backprop f rs, RMap rs, RApply rs, RecApplicative rs, NatToInt (RLength rs), RPureConstrained (IndexableField rs) rs)
+#endif
       => Backprop (ARec f rs) where
     zero = toARec . zero . fromARec
     {-# INLINE zero #-}
diff --git a/src/Numeric/Backprop/Explicit.hs b/src/Numeric/Backprop/Explicit.hs
--- a/src/Numeric/Backprop/Explicit.hs
+++ b/src/Numeric/Backprop/Explicit.hs
@@ -16,7 +16,7 @@
 
 -- |
 -- Module      : Numeric.Backprop.Explicit
--- Copyright   : (c) Justin Le 2018
+-- Copyright   : (c) Justin Le 2023
 -- License     : BSD3
 --
 -- Maintainer  : justin@jle.im
diff --git a/src/Numeric/Backprop/Internal.hs b/src/Numeric/Backprop/Internal.hs
--- a/src/Numeric/Backprop/Internal.hs
+++ b/src/Numeric/Backprop/Internal.hs
@@ -20,7 +20,7 @@
 
 -- |
 -- Module      : Numeric.Backprop.Internal
--- Copyright   : (c) Justin Le 2018
+-- Copyright   : (c) Justin Le 2023
 -- License     : BSD3
 --
 -- Maintainer  : justin@jle.im
@@ -590,7 +590,7 @@
     -> ST s (Runner s)
 initRunner (n, stns) (nx,xs) = do
     delts <- MV.new n
-    for_ (zip [n-1,n-2..] stns) $ \(i, STN (TN{..} :: TapeNode c)) ->
+    for_ (zip [n-1,n-2..] stns) $ \(i, STN (TN{} :: TapeNode c)) ->
       MV.write delts i $ unsafeCoerce (Nothing @c)
     inps <- MV.new nx
     for_ (zip [0..] xs) . uncurry $ \i z ->
diff --git a/src/Numeric/Backprop/Num.hs b/src/Numeric/Backprop/Num.hs
--- a/src/Numeric/Backprop/Num.hs
+++ b/src/Numeric/Backprop/Num.hs
@@ -7,7 +7,7 @@
 
 -- |
 -- Module      : Numeric.Backprop.Num
--- Copyright   : (c) Justin Le 2018
+-- Copyright   : (c) Justin Le 2023
 -- License     : BSD3
 --
 -- Maintainer  : justin@jle.im
diff --git a/src/Numeric/Backprop/Op.hs b/src/Numeric/Backprop/Op.hs
--- a/src/Numeric/Backprop/Op.hs
+++ b/src/Numeric/Backprop/Op.hs
@@ -11,7 +11,7 @@
 
 -- |
 -- Module      : Numeric.Backprop.Op
--- Copyright   : (c) Justin Le 2018
+-- Copyright   : (c) Justin Le 2023
 -- License     : BSD3
 --
 -- Maintainer  : justin@jle.im
diff --git a/src/Prelude/Backprop.hs b/src/Prelude/Backprop.hs
--- a/src/Prelude/Backprop.hs
+++ b/src/Prelude/Backprop.hs
@@ -2,7 +2,7 @@
 
 -- |
 -- Module      : Prelude.Backprop
--- Copyright   : (c) Justin Le 2018
+-- Copyright   : (c) Justin Le 2023
 -- License     : BSD3
 --
 -- Maintainer  : justin@jle.im
diff --git a/src/Prelude/Backprop/Explicit.hs b/src/Prelude/Backprop/Explicit.hs
--- a/src/Prelude/Backprop/Explicit.hs
+++ b/src/Prelude/Backprop/Explicit.hs
@@ -3,7 +3,7 @@
 
 -- |
 -- Module      : Prelude.Backprop.Explicit
--- Copyright   : (c) Justin Le 2018
+-- Copyright   : (c) Justin Le 2023
 -- License     : BSD3
 --
 -- Maintainer  : justin@jle.im
diff --git a/src/Prelude/Backprop/Num.hs b/src/Prelude/Backprop/Num.hs
--- a/src/Prelude/Backprop/Num.hs
+++ b/src/Prelude/Backprop/Num.hs
@@ -3,7 +3,7 @@
 
 -- |
 -- Module      : Prelude.Backprop.Num
--- Copyright   : (c) Justin Le 2018
+-- Copyright   : (c) Justin Le 2023
 -- License     : BSD3
 --
 -- Maintainer  : justin@jle.im
