zipper package:xmonad-contrib

differentiate zs xs takes the first z from z2 that also belongs to xs and turns xs into a stack with z being the current element. Acts as differentiate if zs and xs@ don't intersect.
Zipper over the Data.Tree data structure. This module is based on rosezipper.
A Zipper over the Data.Tree data structure. Very crappy visualization of the TreeZipper data structure
(tz_parents)
([*],       *, [*])
([*, *],    *, [])
([],        *                  [*,   *])
|                   |    |
+-------+--------+-------+------+  +-*-+  *
|       |        |       |      |  |   |
(tz_before) (tz_current) (tz_after) *   *
|       |                |      |
+-*-+     *                *      *
|   |
*   *