This Racket package defines a zipper abstraction, in the sense described by Huet. In addition to a general notion of zipper, automation is provided for zippers of datatypes that are construed as coproducts of structs by deriving the infrastructure for a struct to participate in a zipper.
See the package documentation for details.