diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,14 @@
 # Revision history for changeset
 
+## 0.2
+
+* Support GHC 9.12
+* Drop support for GHC < 9.2
+* Add SetTo
+* Require RightAction as superclass for RightTorsor
+* Add SeqEdit
+* Add helpers changing, changed, relativeTo
+
 ## 0.1.1
 
 * Add support for generic deriving
diff --git a/changeset.cabal b/changeset.cabal
--- a/changeset.cabal
+++ b/changeset.cabal
@@ -1,6 +1,6 @@
 cabal-version: 2.4
 name: changeset
-version: 0.1.1
+version: 0.2
 synopsis: Stateful monad transformer based on monoidal actions
 description:
   A general state monad transformer with separate types for the state and the possible changes.
@@ -18,15 +18,12 @@
 build-type: Simple
 extra-doc-files: CHANGELOG.md
 tested-with:
-  ghc ==8.6
-  ghc ==8.8
-  ghc ==8.10
-  ghc ==9.0
   ghc ==9.2
   ghc ==9.4
   ghc ==9.6
   ghc ==9.8
   ghc ==9.10
+  ghc ==9.12
 
 source-repository head
   type: git
@@ -78,7 +75,7 @@
     Data.Monoid.RightAction.Generic
 
   build-depends:
-    base >=4.12 && <4.22,
+    base >=4.16 && <4.23,
     containers >=0.6 && <0.8,
     indexed-traversable ^>=0.1,
     mmorph >=1.1 && <1.3,
diff --git a/src/Control/Monad/Trans/Changeset.hs b/src/Control/Monad/Trans/Changeset.hs
--- a/src/Control/Monad/Trans/Changeset.hs
+++ b/src/Control/Monad/Trans/Changeset.hs
@@ -113,7 +113,7 @@
 
 The type @w@ encodes /changes/ (or updates, edits, commits, diffs, patches ...) to the state @s.@
 This relation is captured by the 'RightAction' type class from @monoid-extras.@
-It contains a method, @'act' :: w -> s -> s@,
+It contains a method, @'actRight' :: w -> s -> s@,
 which implements the semantics of @w@ as the type of updates to @s.@
 
 The standard example is that of a big record where we only want to change a small portion:
@@ -140,7 +140,7 @@
   | Delete Text
 
 instance RightAction ChangeAddress User where
-  act = ...
+  actRight = ...
 @
 
 Now we can conveniently work in the monad @'ChangesetT' User [ChangeAddress] m.@
@@ -411,11 +411,29 @@
 
 -- * Change examples
 
+-- ** Setting any value
+
+{- | Change a value by setting it to a new value.
+
+This change unconditionally overwrites the old value.
+-}
+newtype SetTo a = SetTo a
+  deriving stock (Eq, Show, Read, Ord, Generic, Functor, Foldable, Traversable)
+
+instance RightAction (SetTo a) a where
+  actRight _ (SetTo a) = a
+
+instance RightTorsor (SetTo a) a where
+  differenceRight _ = SetTo
+
 -- ** Changing lists
 
 {- | A list can be changed by prepending an element, or removing one.
 
 To change an element of a list, see the indexed changes from [@changeset-lens@](hackage.haskell.org/package/changeset-lens).
+
+To change 'Seq'uences (from @containers@) efficiently and compute the minimum edit,
+see 'Data.Monoid.RightAction.Sequence.SeqEdit'.
 -}
 data ListChange a
   = -- | Prepend an element
@@ -673,7 +691,7 @@
         (SetAlignPosition s) -> Just s
         _ -> Nothing
 
-instance (Semialign f, RightTorsor w s) => RightTorsor (AlignChanges f w s) (f s) where
+instance (Semialign f, Filterable f, RightTorsor w s) => RightTorsor (AlignChanges f w s) (f s) where
   differenceRight = ((AlignChanges .) .) $ alignWith $ these (const DeleteAlignPosition) SetAlignPosition $ (ChangeAlignPosition .) . differenceRight
 
 -- ** Changing 'FunctorWithIndex'
diff --git a/src/Data/Monoid/RightAction.hs b/src/Data/Monoid/RightAction.hs
--- a/src/Data/Monoid/RightAction.hs
+++ b/src/Data/Monoid/RightAction.hs
@@ -110,7 +110,7 @@
 See also [monoid-extras' @Torsor@](https://hackage-content.haskell.org/package/monoid-extras/docs/Data-Monoid-Action.html#t:Torsor) for the same concept,
 but for left actions.
 -}
-class RightTorsor m s where
+class (RightAction m s) => RightTorsor m s where
   differenceRight ::
     -- | The original state
     s ->
@@ -126,7 +126,7 @@
   differenceRight sOrig sActed = Last $ if sOrig == sActed then Nothing else Just sActed
 
 -- | Calculate the diff per position of the container.
-instance (RightTorsor w s, Zip f) => RightTorsor (f w) (f s) where
+instance (Semigroup w, RightTorsor w s, Zip f) => RightTorsor (f w) (f s) where
   differenceRight = zipWith differenceRight
 
 instance {-# OVERLAPPING #-} (Num a) => RightTorsor (Sum a) (Sum a) where
diff --git a/src/Data/Monoid/RightAction/Coproduct.hs b/src/Data/Monoid/RightAction/Coproduct.hs
--- a/src/Data/Monoid/RightAction/Coproduct.hs
+++ b/src/Data/Monoid/RightAction/Coproduct.hs
@@ -2,7 +2,6 @@
 
 -- base
 import Data.Foldable (Foldable (foldl'), toList)
-import Data.Typeable (Typeable)
 import Prelude hiding (Foldable (..))
 
 -- containers
@@ -21,7 +20,7 @@
 You should usually want to use 'normaliseCoproduct'.
 -}
 newtype (:+:) m n = Coproduct {getCoproduct :: Seq (Either m n)}
-  deriving (Typeable, Semigroup, Monoid)
+  deriving newtype (Semigroup, Monoid)
 
 {- | Construct a coproduct value from the left constituent monoid.
 
