diff --git a/bluefin-internal.cabal b/bluefin-internal.cabal
--- a/bluefin-internal.cabal
+++ b/bluefin-internal.cabal
@@ -1,6 +1,6 @@
 cabal-version:      3.0
 name:               bluefin-internal
-version:            0.0.12.0
+version:            0.0.13.0
 license:            MIT
 license-file:       LICENSE
 author:             Tom Ellis
diff --git a/src/Bluefin/Internal/Examples.hs b/src/Bluefin/Internal/Examples.hs
--- a/src/Bluefin/Internal/Examples.hs
+++ b/src/Bluefin/Internal/Examples.hs
@@ -3,7 +3,7 @@
 
 module Bluefin.Internal.Examples where
 
-import Bluefin.Internal hiding (w)
+import Bluefin.Internal hiding (b, w)
 import Bluefin.Internal.Pipes
   ( Producer,
     runEffect,
@@ -261,11 +261,11 @@
             (\_ -> effIO io (putStrLn "Leaving 2"))
             $ \_ -> do
               for_ [1 :: Int .. 100] $ \n -> do
-                b' <- await r
+                b <- await r
                 effIO
                   io
                   ( putStrLn
-                      ("Consumed body " ++ show b' ++ " at time " ++ show n)
+                      ("Consumed body " ++ show b ++ " at time " ++ show n)
                   )
               pure "Consumer finished first"
       )
@@ -332,11 +332,11 @@
             $ \_ -> do
               effIO io (putStrLn ("Consumed intial " ++ show binit))
               for_ [1 :: Int .. 100] $ \n -> do
-                b' <- await r
+                b <- await r
                 effIO
                   io
                   ( putStrLn
-                      ("Consumed body " ++ show b' ++ " at time " ++ show n)
+                      ("Consumed body " ++ show b ++ " at time " ++ show n)
                   )
               pure "Consumer finished first"
       )
@@ -834,7 +834,6 @@
 -- > exampleCounter7B
 -- (["Count was even","Count was even","Count was even","Count was even","Count was even","Count was even"],-42)
 
-
 -- FileSystem
 
 data FileSystem es = MkFileSystem
@@ -843,10 +842,11 @@
   }
 
 instance Handle FileSystem where
-  mapHandle fs = MkFileSystem {
-    readFileImpl = \fp -> useImplUnder (readFileImpl fs fp),
-    writeFileImpl = \fp s -> useImplUnder (writeFileImpl fs fp s)
-    }
+  mapHandle fs =
+    MkFileSystem
+      { readFileImpl = \fp -> useImplUnder (readFileImpl fs fp),
+        writeFileImpl = \fp s -> useImplUnder (writeFileImpl fs fp s)
+      }
 
 readFile :: (e :> es) => FileSystem e -> FilePath -> Eff es String
 readFile fs filepath = makeOp (readFileImpl (mapHandle fs) filepath)
@@ -1021,3 +1021,42 @@
   effIO io $ putStrLn $ case r of
     Left e -> "Caught IOException:\n" ++ show e
     Right contents -> contents
+
+data DynamicReader r e = DynamicReader
+  { askLRImpl :: forall e'. Eff (e' :& e) r,
+    localLRImpl :: forall e' a. (r -> r) -> Eff e' a -> Eff (e' :& e) a
+  }
+
+instance Handle (DynamicReader r) where
+  mapHandle h =
+    DynamicReader
+      { askLRImpl = useImplUnder (askLRImpl h),
+        localLRImpl = \f k -> useImplUnder (localLRImpl h f k)
+      }
+
+askLR ::
+  (e :> es) =>
+  DynamicReader r e ->
+  Eff es r
+askLR c = makeOp (askLRImpl (mapHandle c))
+
+localLR ::
+  (e :> es) =>
+  DynamicReader r e ->
+  (r -> r) ->
+  Eff es a ->
+  Eff es a
+localLR c f m = makeOp (localLRImpl (mapHandle c) f m)
+
+runDynamicReader ::
+  r ->
+  (forall e. DynamicReader r e -> Eff (e :& es) a) ->
+  Eff es a
+runDynamicReader r k =
+  runReader r $ \h -> do
+    useImplIn
+      k
+      DynamicReader
+        { askLRImpl = ask h,
+          localLRImpl = \f k' -> makeOp (local h f (useImpl k'))
+        }
