diff --git a/Shpadoinkle-lens.cabal b/Shpadoinkle-lens.cabal
--- a/Shpadoinkle-lens.cabal
+++ b/Shpadoinkle-lens.cabal
@@ -1,33 +1,34 @@
-cabal-version: 1.12
-
--- This file has been generated from package.yaml by hpack version 0.33.0.
---
--- see: https://github.com/sol/hpack
---
--- hash: 8044321b8a3c2ed1b16f23e5bd3160b932676c32a3828891205748092e686b67
-
-name:           Shpadoinkle-lens
-version:        0.0.0.3
-synopsis:       Lens combinators for Shpadoinkle applications.
-description:    Lens combinators for Shpadoinkle applications.
-category:       Web
-author:         Isaac Shapira
-maintainer:     fresheyeball@protonmail.com
-license:        BSD3
-license-file:   LICENSE
-build-type:     Simple
+cabal-version: 2.2
+name:          Shpadoinkle-lens
+version:       0.0.0.4
+category:      Web
+author:        Isaac Shapira
+maintainer:    isaac.shapira@platonic.systems
+license:       BSD-3-Clause
+license-file:  LICENSE
+build-type:    Simple
+synopsis:      Lens combinators for Shpadoinkle applications.
+description:   Lens combinators for Shpadoinkle applications.
 
 library
   exposed-modules:
-      Shpadoinkle.Lens
-  other-modules:
-      Paths_Shpadoinkle_lens
-  hs-source-dirs:
-      ./.
-  ghc-options: -Wall -Wcompat -fwarn-redundant-constraints -fwarn-incomplete-uni-patterns -fwarn-tabs -fwarn-incomplete-record-updates -fwarn-identities
+    Shpadoinkle.Lens
+
+  hs-source-dirs: .
+
+  ghc-options:
+    -Wall
+    -Wcompat
+    -fwarn-redundant-constraints
+    -fwarn-incomplete-uni-patterns
+    -fwarn-tabs
+    -fwarn-incomplete-record-updates
+    -fwarn-identities
+
   build-depends:
       Shpadoinkle
     , base >=4.12.0 && <4.16
     , lens
     , text >=1.2.3 && <1.3
+
   default-language: Haskell2010
diff --git a/Shpadoinkle/Lens.hs b/Shpadoinkle/Lens.hs
--- a/Shpadoinkle/Lens.hs
+++ b/Shpadoinkle/Lens.hs
@@ -9,7 +9,7 @@
 module Shpadoinkle.Lens (
   -- * Continuous Composition
   generalize
-  , onSum, onRecord
+  , onSum, onRecord, onRecordEndo
   , mapLens, (%>)
   , forLens, (<%)
   -- * Misc Outlaws
@@ -48,6 +48,10 @@
 onRecord = generalize
 {-# INLINE onRecord #-}
 {-# INLINE generalize #-}
+
+
+onRecordEndo :: forall f m s a. Functor m => Continuous f => Lens' s a -> (a -> f m a) -> s -> f m s
+onRecordEndo len f s = liftC (set len) (view len) (f $ view len s)
 
 
 {-|
