Zippers clicked for me when I realized that they are a way to traverse immutable data structures by allocating like crazy. For example, you can have a pair of lists, &quot;left&quot; and &quot;right&quot;. To &quot;move left&quot;, you create a new pair of lists: the left list minus one element, and the right list plus one element. The same idea also works for traversing other data structures, like trees.