diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,6 @@
+# optics-core-0.4.1.1 (2023-06-22)
+* Add INLINE pragmas to small functions that really should inline
+
 # optics-core-0.4.1 (2022-03-22)
 * Add support for GHC-9.2
 * Add `is` ([#410](https://github.com/well-typed/optics/pull/410))
diff --git a/optics-core.cabal b/optics-core.cabal
--- a/optics-core.cabal
+++ b/optics-core.cabal
@@ -1,13 +1,13 @@
 cabal-version: 2.2
 name:          optics-core
-version:       0.4.1
+version:       0.4.1.1
 license:       BSD-3-Clause
 license-file:  LICENSE
 build-type:    Simple
 maintainer:    optics@well-typed.com
 author:        Adam Gundry, Andres Löh, Andrzej Rybczak, Oleg Grenrus
 tested-with:   GHC ==8.2.2 || ==8.4.4 || ==8.6.5 || ==8.8.4 || ==8.10.7
-                || ==9.0.2 || ==9.2.2, GHCJS ==8.4
+                || ==9.0.2 || ==9.2.8 || ==9.4.5 || ==9.6.2, GHCJS ==8.4
 synopsis:      Optics as an abstract interface: core definitions
 category:      Data, Optics, Lenses
 description:
@@ -75,7 +75,7 @@
                , array                  >= 0.5.2.0    && <0.6
                , containers             >= 0.5.10.2   && <0.7
                , indexed-profunctors    >= 0.1        && <0.2
-               , transformers           >= 0.5        && <0.6
+               , transformers           >= 0.5        && <0.7
                , indexed-traversable    >= 0.1        && <0.2
 
   exposed-modules: Optics.Core
diff --git a/src/Optics/Internal/Optic.hs b/src/Optics/Internal/Optic.hs
--- a/src/Optics/Internal/Optic.hs
+++ b/src/Optics/Internal/Optic.hs
@@ -106,6 +106,7 @@
       .  Optic_ srcKind  p i (Curry is i) s t a b
       -> Optic_ destKind p i (Curry is i) s t a b
     cast x = implies @srcKind @destKind @p x
+{-# INLINE castOptic #-}
 
 -- | Compose two optics of compatible flavours.
 --
@@ -128,6 +129,7 @@
     m :: forall p i. (Profunctor p, Constraints m p)
       => Optic__ p i (Curry ks i) s t a b
     m | IxEq <- appendIndices @is @js @ks @i = km . lm
+{-# INLINE (%) #-}
 
 -- | Compose two optics of the same flavour.
 --
@@ -144,6 +146,7 @@
     oo :: forall p i. (Profunctor p, Constraints k p)
        => Optic__ p i (Curry ks i) s t a b
     oo | IxEq <- appendIndices @is @js @ks @i = o . o'
+{-# INLINE (%%) #-}
 
 -- | Flipped function application, specialised to optics and binding tightly.
 --
@@ -157,6 +160,7 @@
      -> (Optic k is s t a b -> Optic l js s' t' a' b')
      -> Optic l js s' t' a' b'
 (%&) = (&)
+{-# INLINE (%&) #-}
 
 -- $setup
 -- >>> import Optics.Core
diff --git a/src/Optics/Internal/Optic/TypeLevel.hs b/src/Optics/Internal/Optic/TypeLevel.hs
--- a/src/Optics/Internal/Optic/TypeLevel.hs
+++ b/src/Optics/Internal/Optic/TypeLevel.hs
@@ -111,12 +111,12 @@
 class AppendIndices xs ys ks | xs ys -> ks where
   appendIndices :: IxEq i (Curry xs (Curry ys i)) (Curry ks i)
 
--- | If the second list is empty, we can shortcircuit and pick the first list
--- immediately.
-instance {-# INCOHERENT #-} AppendIndices xs '[] xs where
+-- | If the second list is empty, we can pick the first list
+-- even if nothing is known about it.
+instance {-# INCOHERENT #-} xs ~ zs => AppendIndices xs '[] zs where
   appendIndices = IxEq
 
-instance AppendIndices '[] ys ys where
+instance ys ~ zs => AppendIndices '[] ys zs where
   appendIndices = IxEq
 
 instance AppendIndices xs ys ks => AppendIndices (x ': xs) ys (x ': ks) where
diff --git a/src/Optics/Iso.hs b/src/Optics/Iso.hs
--- a/src/Optics/Iso.hs
+++ b/src/Optics/Iso.hs
@@ -50,8 +50,8 @@
   -- | The functions translating back and forth must be mutually inverse:
   --
   -- @
-  -- 'Optics.Getter.view' i . 'Optics.Getter.review' i ≡ 'id'
-  -- 'Optics.Getter.review' i . 'Optics.Getter.view' i ≡ 'id'
+  -- 'Optics.Getter.view' i . 'Optics.Review.review' i ≡ 'id'
+  -- 'Optics.Review.review' i . 'Optics.Getter.view' i ≡ 'id'
   -- @
 
   -- * Additional introduction forms
