## Enhancing a Zip

This post is part four of the zip folding series inspired by Max Rabkin’s *Beautiful folding* post.
I meant to write one little post, but one post turned into four.
When I sense that something can be made simpler/clearer, I can’t leave it be.

To review:

- Part One related Max’s data representation of left folds to type class morphisms, a pattern that’s been steering me lately toward natural (inevitable) design of libraries.
- Part Two simplified that representation to help get to the essence of zipping, and in doing so lost the expressiveness necessary to define
`Functor`

and`Applicative`

instaces. - Part Three proved the suitability of the zipping definitions in Part Two.

This post shows how to restore the `Functor`

and `Applicative`

(very useful composition tools) to folds but does so in a way that leaves the zipping functionality untouched.
This new layer is independent of folding and can be layered onto *any zippable type*.

You can get the code described below.

**Edits**:

- 2009-02-15: Simplified
`WithCont`

, collapsing two type parameters into one. Added functor comment about`cfoldlc'`

.