diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,7 +3,12 @@
 `fused-effects-optics` uses [PVP Versioning][1].
 The changelog is available [on GitHub][2].
 
-## 0.0.2.0
+## 0.2.1.0
+
+* GHC 9.2 support.
+* Add `<~` operator.
+
+## 0.2.0.0
 
 * GHC 9 support.
 * Add `Control.Effect.Optics.Indexed` module.
diff --git a/README.md b/README.md
--- a/README.md
+++ b/README.md
@@ -2,7 +2,7 @@
 
 [![Hackage](https://img.shields.io/hackage/v/fused-effects-optics.svg)](https://hackage.haskell.org/package/fused-effects-optics)
 [![BSD3 license](https://img.shields.io/badge/license-BSD3-blue.svg)](LICENSE)
-[![Build Status](https://action-badges.now.sh/fused-effects/fused-effects-optics)](https://github.com/fused-effects/fused-effects-optics/actions)
+[![Build Status](https://github.com/fused-effects/fused-effects-optics/actions/workflows/ci.yml/badge.svg)](https://github.com/fused-effects/fused-effects-optics/actions)
 
 This package provides an interface to the [`optics`](https://github.com/well-typed/optics) library compatible with [`fused-effects`](https://github.com/robrix/fused-effects). The combinators provided by `optics-extra` for operating in monadic contexts—`gview`, `use`, `.=`, &c.—rely on `mtl` for `MonadState` and `MonadReader`, which is not applicable to `Reader` and `State` effects.
 
diff --git a/fused-effects-optics.cabal b/fused-effects-optics.cabal
--- a/fused-effects-optics.cabal
+++ b/fused-effects-optics.cabal
@@ -1,6 +1,6 @@
 cabal-version:       2.2
 name:                fused-effects-optics
-version:             0.2.0.0
+version:             0.2.1.0
 synopsis:            Bridge between the optics and fused-effects ecosystems.
 description:         Provides combinators for the optics-based manipulation of state and context types provided by the fused-effects library, similar to those provided by optics-extra for mtl-based monad transformers.
 homepage:            https://github.com/fused-effects/fused-effects-optics
@@ -9,13 +9,15 @@
 license-file:        LICENSE
 author:              Patrick Thomson
 maintainer:          patrick.william.thomson@gmail.com
-copyright:           2020 Patrick Thomson
+copyright:           2020-2021 Patrick Thomson
 category:            Control
 build-type:          Simple
 extra-doc-files:     README.md
                    , CHANGELOG.md
 tested-with:         GHC == 8.8.3
                      GHC == 8.10.1
+                     GHC == 9.0
+                     GHC == 9.2
 
 source-repository head
   type:                git
@@ -27,9 +29,9 @@
                        Control.Effect.Optics.Indexed
 
 
-  build-depends:       base >= 4.12 && < 4.16
+  build-depends:       base >= 4.12 && < 5
                      , fused-effects >= 1 && < 1.2
-                     , optics-core >= 0.3
+                     , optics-core == 0.*
 
   ghc-options:         -Wall
                        -Wincomplete-uni-patterns
diff --git a/src/Control/Effect/Optics.hs b/src/Control/Effect/Optics.hs
--- a/src/Control/Effect/Optics.hs
+++ b/src/Control/Effect/Optics.hs
@@ -20,6 +20,7 @@
     (.=),
     (?=),
     (%=),
+    (<~),
   )
 where
 
@@ -174,3 +175,7 @@
   m ()
 (%=) = modifying
 {-# INLINE (%=) #-}
+
+-- | Run the provided monadic action and assign it to the target of a 'Setter'.
+(<~) :: (Is k A_Setter, Has (State s) sig m) => Optic k is s s a b -> m b -> m ()
+l <~ mb = mb >>= assign l
