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
andApplicative
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 aboutcfoldlc'
.