Template meta-programming for Haskell
Proceedings of the 2002 ACM SIGPLAN workshop on Haskell
Scrap your boilerplate: a practical design pattern for generic programming
Proceedings of the 2003 ACM SIGPLAN international workshop on Types in languages design and implementation
MPC '02 Proceedings of the 6th International Conference on Mathematics of Program Construction
Journal of Functional Programming
Journal of Functional Programming
Scrap more boilerplate: reflection, zips, and generalised casts
Proceedings of the ninth ACM SIGPLAN international conference on Functional programming
Strongly typed heterogeneous collections
Haskell '04 Proceedings of the 2004 ACM SIGPLAN workshop on Haskell
Scrap your boilerplate with class: extensible generic functions
Proceedings of the tenth ACM SIGPLAN international conference on Functional programming
Simple unification-based type inference for GADTs
Proceedings of the eleventh ACM SIGPLAN international conference on Functional programming
Scrap your boilerplate with XPath-like combinators
Proceedings of the 34th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
∂ for Data: Differentiating Data Structures
Fundamenta Informaticae - Typed Lambda Calculi and Applications 2003, Selected Papers
Clowns to the left of me, jokers to the right (pearl): dissecting data structures
Proceedings of the 35th annual ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Type checking with open type functions
Proceedings of the 13th ACM SIGPLAN international conference on Functional programming
Comparing libraries for generic programming in haskell
Proceedings of the first ACM SIGPLAN symposium on Haskell
Clase: cursor library for a structured editor
Proceedings of the first ACM SIGPLAN symposium on Haskell
Generic programming with fixed points for mutually recursive datatypes
Proceedings of the 14th ACM SIGPLAN international conference on Functional programming
Lazy functional incremental parsing
Proceedings of the 2nd ACM SIGPLAN symposium on Haskell
TLCA'03 Proceedings of the 6th international conference on Typed lambda calculi and applications
Delimited continuations in operating systems
CONTEXT'07 Proceedings of the 6th international and interdisciplinary conference on Modeling and using context
Comparing approaches to generic programming in Haskell
SSDGP'06 Proceedings of the 2006 international conference on Datatype-generic programming
Generic programming with dependent types
SSDGP'06 Proceedings of the 2006 international conference on Datatype-generic programming
“Scrap your boilerplate” reloaded
FLOPS'06 Proceedings of the 8th international conference on Functional and Logic Programming
Exploring the regular tree types
TYPES'04 Proceedings of the 2004 international conference on Types for Proofs and Programs
“Scrap your boilerplate” revolutions
MPC'06 Proceedings of the 8th international conference on Mathematics of Program Construction
A foundation for GADTs and inductive families: dependent polynomial functor approach
Proceedings of the seventh ACM SIGPLAN workshop on Generic programming
A generic abstract syntax model for embedded languages
Proceedings of the 17th ACM SIGPLAN international conference on Functional programming
Hi-index | 0.00 |
The zipper type provides the ability to efficiently edit tree-shaped data in a purely functional setting by providing constant time edits at a focal point in an immutable structure. It is used in a number of applications and is widely applicable for manipulating tree-shaped data structures. The traditional zipper suffers from two major limitations, however. First, it operates only on homogeneous types. That is to say, every node the zipper visits must have the same type. In practice, many tree-shaped types do not satisfy this condition, and thus cannot be handled by the traditional zipper. Second, the traditional zipper involves a significant amount of boilerplate code. A custom implementation must be written for each type the zipper traverses. This is error prone and must be updated whenever the type being traversed changes. The generic zipper presented in this paper overcomes these limitations. It operates over any type and requires no boilerplate code to be written by the user. The only restriction is that the types traversed must be instances of the Data class from the Scrap your Boilerplate framework