diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,3 +1,7 @@
+# 0.4.4.0
+
+* Added `mapAccumLOf`.
+
 # 0.4.3.0
 
 * Added `?~`.
diff --git a/microlens.cabal b/microlens.cabal
--- a/microlens.cabal
+++ b/microlens.cabal
@@ -1,5 +1,5 @@
 name:                microlens
-version:             0.4.3.0
+version:             0.4.4.0
 synopsis:            A tiny part of the lens library with no dependencies
 description:
   This is an extract from <http://hackage.haskell.org/package/lens lens> (with no dependencies). It's not a toy lenses library, unsuitable for “real world”, but merely a small one. It is compatible with lens, and should have same performance. It also has better documentation.
@@ -12,7 +12,7 @@
   .
   Don't use this library:
   .
-    * if you need @Iso@s, @Prism@s, indexed traversals, or actually anything else which isn't defined here
+    * if you need @Iso@s, @Prism@s, indexed traversals, or actually anything else which isn't defined here (tho some indexed functions are available elsewhere – containers and vector provide them for their types, and <http://hackage.haskell.org/package/ilist ilist> provides indexed functions for lists)
   .
     * if you want a library with a clean, understandable implementation (in which case you're looking for <http://hackage.haskell.org/package/lens-simple lens-simple>)
   .
diff --git a/src/Lens/Micro.hs b/src/Lens/Micro.hs
--- a/src/Lens/Micro.hs
+++ b/src/Lens/Micro.hs
@@ -68,6 +68,7 @@
   each,
   ix,
   _head, _tail, _init, _last,
+  mapAccumLOf,
 
   -- * Prism: a traversal iterating over at most 1 element
   -- $prisms-note
@@ -88,6 +89,7 @@
 import Data.Functor.Identity
 import Data.Monoid
 import Data.Maybe
+import Data.Tuple
 import qualified Data.Foldable as F
 import Unsafe.Coerce
 
@@ -905,6 +907,20 @@
 _last :: Snoc s s a a => Traversal' s a
 _last = _Snoc._2
 {-# INLINE _last #-}
+
+
+{- |
+This generalizes 'Data.Traversable.mapAccumL' to an arbitrary 'Traversal'. (Note that it doesn't work on folds, only traversals.)
+
+@
+'mapAccumL' ≡ 'mapAccumLOf' 'traverse'
+@
+-}
+mapAccumLOf :: LensLike (State acc) s t a b -> (acc -> a -> (acc, b)) -> acc -> s -> (acc, t)
+mapAccumLOf l f acc0 s = swap (runState (l g s) acc0)
+  where
+    g a = state $ \acc -> swap (f acc a)
+{-# INLINE mapAccumLOf #-}
 
 -- Prisms ------------------------------------------------------------------
 
