diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,7 @@
+0.0.3
+
+* Add `homReader` functions.
+
 0.0.2
 
 * Widen version bounds
diff --git a/reader.cabal b/reader.cabal
--- a/reader.cabal
+++ b/reader.cabal
@@ -1,7 +1,7 @@
 name:                 reader
-version:              0.0.2
+version:              0.0.3
 synopsis:             A reader data type with all the bits
-description:          A reader data type with all the bits
+description:          A reader data type with all the bits and type constructor rearrangements
 license:              BSD3
 license-file:         LICENCE
 author:               Tony Morris <ʇǝu˙sıɹɹoɯʇ@ןןǝʞsɐɥ>
diff --git a/src/Data/Reader/Reader1.hs b/src/Data/Reader/Reader1.hs
--- a/src/Data/Reader/Reader1.hs
+++ b/src/Data/Reader/Reader1.hs
@@ -4,6 +4,7 @@
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE RankNTypes #-}
 
 module Data.Reader.Reader1(
   Reader1T(..)
@@ -14,6 +15,7 @@
 , reader1'
 , star1
 , kleisli1
+, homReader1
 ) where
 
 import Control.Applicative
@@ -121,6 +123,13 @@
   iso
     (\(Kleisli k) -> Reader1T k)
     (\(Reader1T k) -> Kleisli k)
+
+homReader1 ::
+  (forall x. f x -> g x)
+  -> Reader1T a f b
+  -> Reader1T a g b
+homReader1 f =
+  over _Wrapped (f .)
 
 instance Functor f => Functor (Reader1T a f) where
   fmap f (Reader1T g) =
diff --git a/src/Data/Reader/Reader2.hs b/src/Data/Reader/Reader2.hs
--- a/src/Data/Reader/Reader2.hs
+++ b/src/Data/Reader/Reader2.hs
@@ -5,6 +5,7 @@
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE RankNTypes #-}
 
 module Data.Reader.Reader2(
   Reader2T(..)
@@ -15,6 +16,7 @@
 , reader2'
 , star2
 , kleisli2
+, homReader2
 ) where
 
 import Data.Type.Equality
@@ -142,6 +144,13 @@
   iso
     (\(Kleisli k) -> Reader2T k)
     (\(Reader2T k) -> Kleisli k)
+
+homReader2 ::
+  (forall x. f x -> g x)
+  -> Reader2T f a b
+  -> Reader2T g a b
+homReader2 f =
+  over _Wrapped (f .)
 
 instance Functor f => Functor (Reader2T f a) where
   fmap f (Reader2T g) =
diff --git a/src/Data/Reader/Reader3.hs b/src/Data/Reader/Reader3.hs
--- a/src/Data/Reader/Reader3.hs
+++ b/src/Data/Reader/Reader3.hs
@@ -4,6 +4,7 @@
 {-# LANGUAGE MultiParamTypeClasses #-}
 {-# LANGUAGE TypeFamilies #-}
 {-# LANGUAGE TypeOperators #-}
+{-# LANGUAGE RankNTypes #-}
 
 module Data.Reader.Reader3(
   Reader3T(..)
@@ -14,8 +15,8 @@
 , reader3'
 , star3
 , kleisli3
+, homReader3
 ) where
-
 import Data.Type.Equality
 import Control.Applicative
     ( Applicative(pure), liftA2 )
@@ -110,6 +111,13 @@
   iso
     (\(Kleisli k) -> Reader3T k)
     (\(Reader3T k) -> Kleisli k)
+
+homReader3 ::
+  (forall x. f x -> g x)
+  -> Reader3T f b a
+  -> Reader3T g b a
+homReader3 f =
+  over _Wrapped (f .)
 
 instance Contravariant (Reader3T f b) where
   contramap f =
