diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,9 @@
 # composition-prelude
 
+# 3.0.1.0
+
+  * Add `onM`
+
 # 3.0.0.2
 
   * Faster `thread`, hopefully
diff --git a/composition-prelude.cabal b/composition-prelude.cabal
--- a/composition-prelude.cabal
+++ b/composition-prelude.cabal
@@ -1,6 +1,6 @@
 cabal-version:   1.18
 name:            composition-prelude
-version:         3.0.0.2
+version:         3.0.1.0
 license:         BSD3
 license-file:    LICENSE
 copyright:       Copyright: (c) 2017-2020 Vanessa McHale
diff --git a/src/Control/Composition.hs b/src/Control/Composition.hs
--- a/src/Control/Composition.hs
+++ b/src/Control/Composition.hs
@@ -33,6 +33,7 @@
     -- * Monadic helpers
     , bisequence'
     , (.$)
+    , onM
     -- * Monadic actions
     , axe
     , biaxe
@@ -277,3 +278,7 @@
 -- @since 1.5.3.0
 (<~@~<) :: Monad m => (c -> m d) -> (a -> m b) -> (b -> m c) -> a -> m d
 (<~@~<) = betweenM
+
+-- @since 3.0.1.0
+onM :: Monad m => (b -> b -> m c) -> (a -> m b) -> a -> a -> m c
+onM g f x y = do {x' <- f x; y' <- f y; g x' y'}
