diff --git a/changelog.md b/changelog.md
--- a/changelog.md
+++ b/changelog.md
@@ -1,3 +1,7 @@
+0.0.8
+
+* add `rev` function to reverse
+
 0.0.7
 
 * haddock for function categories
diff --git a/list-zipper.cabal b/list-zipper.cabal
--- a/list-zipper.cabal
+++ b/list-zipper.cabal
@@ -1,5 +1,5 @@
 name:               list-zipper
-version:            0.0.7
+version:            0.0.8
 license:            BSD3
 license-file:       LICENCE
 author:             Queensland Functional Programming Lab <oᴉ˙ldɟb@llǝʞsɐɥ>
diff --git a/src/Data/ListZipper.hs b/src/Data/ListZipper.hs
--- a/src/Data/ListZipper.hs
+++ b/src/Data/ListZipper.hs
@@ -30,6 +30,8 @@
 , list
 -- * indices
 , zipperIndices
+-- * transform
+, rev
 -- * movement
 , moveLeft
 , moveRight
@@ -79,6 +81,7 @@
 -- * list zipper state operations
 , liftListZipperOp
 , mkListZipperOp
+, (<$~)
 , (*>>)
 , (<<*)
 , mkListZipperOp'
@@ -118,7 +121,7 @@
 import Data.Eq.Deriving(deriveEq1)
 import Data.Foldable(Foldable(toList, foldMap))
 import Data.Function(flip)
-import Data.Functor(Functor(fmap), (<$>))
+import Data.Functor(Functor(fmap), (<$>), (<$))
 import Data.Functor.Alt(Alt((<!>)))
 import Data.Functor.Apply(Apply((<.>)))
 import Data.Functor.Bind(Bind((>>-)))
@@ -361,6 +364,12 @@
         (ln, x)
         (zip [ln + 1..] r)
 
+rev ::
+  ListZipper a
+  -> ListZipper a
+rev (ListZipper l x r) =
+  ListZipper r x l
+
 moveStart ::
   ListZipper a
   -> ListZipper a
@@ -592,6 +601,22 @@
   -> ListZipperOp a b
 mkListZipperOp f = 
   get >>= liftListZipperOp . f
+
+(<$~) ::
+  ListZipperOp a b
+  -> ListZipperOp a c
+  -> ListZipperOp a b
+ListZipperOp x <$~ ListZipperOp y =
+  ListZipperOp
+    (\z ->
+      case x z of
+        Nothing ->
+          Nothing
+        Just (z', r) ->
+          fmap (r <$) (y z')
+    )
+
+infixl 5 <$~
 
 (*>>) :: 
   (ListZipper a -> Maybe b)
