diff --git a/CHANGELOG.md b/CHANGELOG.md
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,6 +3,13 @@
 `fused-effects-optics` uses [PVP Versioning][1].
 The changelog is available [on GitHub][2].
 
+## 0.0.2.0
+
+* GHC 9 support.
+* Add `Control.Effect.Optics.Indexed` module.
+* `eview` and `eviews` are renamed to `view` and `views`.
+* Added `locally`.
+
 ## 0.0.1.0
 
 * Initially created.
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.1.0.0
+version:             0.2.0.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
@@ -24,9 +24,10 @@
 library
   hs-source-dirs:      src
   exposed-modules:     Control.Effect.Optics
+                       Control.Effect.Optics.Indexed
 
 
-  build-depends:       base >= 4.12 && < 4.15
+  build-depends:       base >= 4.12 && < 4.16
                      , fused-effects >= 1 && < 1.2
                      , optics-core >= 0.3
 
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
@@ -5,14 +5,17 @@
 
 module Control.Effect.Optics
   ( -- * Reader operations
-    eview,
-    eviews,
+    Control.Effect.Optics.view,
+    Control.Effect.Optics.views,
+    locally,
+
     -- * State operations
     use,
     uses,
     preuse,
     assign,
     modifying,
+
     -- * Infix operators
     (.=),
     (?=),
@@ -26,20 +29,21 @@
 
 -- | View the target of a 'Lens', 'Iso', or 'Getter' in the current context.
 --
--- This function is prefixed so as not to collide with 'Optics.Core.view'.
---
-eview ::
+-- Because functions implement 'Reader.Reader', you can use this wherever
+-- you would use the @view@ function in @optics@, as well as the @gview@
+-- operation in @optics-extra@.
+view ::
   forall r a m sig k is.
   ( Is k A_Getter,
     Has (Reader.Reader r) sig m
   ) =>
   Optic' k is r a ->
   m a
-eview l = Reader.asks (view l)
-{-# INLINE eview #-}
+view l = Reader.asks (Optics.Core.view l)
+{-# INLINE view #-}
 
 -- | Apply a function to the target of a 'Lens', 'Iso', or 'Getter' in the current context.
-eviews ::
+views ::
   forall r a b m sig k is.
   ( Is k A_Getter,
     Has (Reader.Reader r) sig m
@@ -47,9 +51,21 @@
   Optic' k is r a ->
   (a -> b) ->
   m b
-eviews l f = Reader.asks (f . view l)
-{-# INLINE eviews #-}
+views l f = Reader.asks (f . Optics.Core.view l)
+{-# INLINE views #-}
 
+-- | Given a monadic argument, evaluate it in a context modified by applying
+-- the provided function to the target of the provided 'Setter', 'Lens', or 'Traversal'.
+locally ::
+  ( Is k A_Setter,
+    Has (Reader.Reader r) sig m
+  ) =>
+  Optic k is r r a b ->
+  (a -> b) ->
+  m c ->
+  m c
+locally l f = Reader.local (over l f)
+
 -- | Use the target of a 'Lens', 'Iso', or 'Getter' in the current state.
 use ::
   forall s a m sig k is.
@@ -58,7 +74,7 @@
   ) =>
   Optic' k is s a ->
   m a
-use l = State.gets (view l)
+use l = State.gets (Optics.Core.view l)
 {-# INLINE use #-}
 
 -- | Apply a function to the target of a 'Lens', 'Iso', or 'Getter' in the current state.
@@ -70,7 +86,7 @@
   Optic' k is s a ->
   (a -> b) ->
   m b
-uses l f = State.gets (f . view l)
+uses l f = State.gets (f . Optics.Core.view l)
 {-# INLINE uses #-}
 
 -- | Use the target of a 'AffineTraversal' or 'AffineFold' in the current state.
diff --git a/src/Control/Effect/Optics/Indexed.hs b/src/Control/Effect/Optics/Indexed.hs
new file mode 100644
--- /dev/null
+++ b/src/Control/Effect/Optics/Indexed.hs
@@ -0,0 +1,40 @@
+{-# LANGUAGE FlexibleContexts #-}
+{-# LANGUAGE TypeOperators #-}
+
+module Control.Effect.Optics.Indexed
+  ( -- * Indexed reader operations
+    iview,
+    iviews,
+    ilocally,
+
+    -- * Indexed state operations
+    iuse,
+    iuses,
+  )
+where
+
+import Control.Effect.Reader as Reader
+import Control.Effect.State as State
+import Optics.Core hiding (iview, iviews)
+import qualified Optics.Core as Optics
+
+-- | View the index and value of an indexed getter into the current environment as a pair.
+iview :: (Is k A_Getter, is `HasSingleIndex` i, Has (Reader.Reader r) sig m) => Optic' k is r a -> m (i, a)
+iview l = Reader.asks (Optics.iview l)
+
+-- | View the index and value of an indexed getter into the current environment and pass them to the provided function.
+iviews :: (Is k A_Getter, is `HasSingleIndex` i, Has (Reader.Reader r) sig m) => Optic' k is r a -> (i -> a -> m b) -> m b
+iviews l f = Reader.ask >>= Optics.iviews l f
+
+-- | Given a monadic argument, evaluate it in a context modified by applying
+-- the provided function to the index and target of the provided indexed 'Setter', 'Lens', or 'Traversal'.
+ilocally :: (Has (Reader s) sig m, is `HasSingleIndex` i, Is k A_Setter) => Optic k is s s a1 b -> (i -> a1 -> b) -> m a2 -> m a2
+ilocally l f = Reader.local (iover l f)
+
+-- | Extract the index and target of an indexed getter in the current state as a pair.
+iuse :: (Is k A_Getter, is `HasSingleIndex` i, Has (State s) sig m) => Optic' k is s a -> m (i, a)
+iuse l = State.gets (Optics.iview l)
+
+-- | Extract the index and target of an indexed getter in the current state and pass them to the provided function.
+iuses :: (Is k A_Getter, is `HasSingleIndex` i, Has (State s) sig m) => Optic' k is s a -> (i -> a -> m b) -> m b
+iuses l r = State.get >>= Optics.iviews l r
