Dynamic typing in a statically-typed language
POPL '89 Proceedings of the 16th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Proceedings of the 5th ACM conference on Functional programming languages and computer architecture
Proceedings of the 5th ACM conference on Functional programming languages and computer architecture
Functional programming with bananas, lenses, envelopes and barbed wire
Proceedings of the 5th ACM conference on Functional programming languages and computer architecture
Proceedings of the 5th ACM conference on Functional programming languages and computer architecture
Type reconstruction in finite rank fragments of the second-order &lgr;-calculus
Information and Computation - Special issue: Selections from 1990 IEEE symposium on logic in computer science
FPCA '93 Proceedings of the conference on Functional programming languages and computer architecture
FPCA '93 Proceedings of the conference on Functional programming languages and computer architecture
Compiling polymorphism using intensional type analysis
POPL '95 Proceedings of the 22nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Lisp and Symbolic Computation - Special issue on state in programming languages (part I)
Putting type annotations to work
POPL '96 Proceedings of the 23rd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
PolyP—a polytypic programming language extension
Proceedings of the 24th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Purely functional data structures
Purely functional data structures
Building program optimizers with rewriting strategies
ICFP '98 Proceedings of the third ACM SIGPLAN international conference on Functional programming
Haskell and XML: generic combinators or type-based translation?
Proceedings of the fourth ACM SIGPLAN international conference on Functional programming
Type dispatch for named hierarchical types
Proceedings of the fourth ACM SIGPLAN international conference on Functional programming
A new approach to generic functional programming
Proceedings of the 27th ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Type-safe cast: (functional pearl)
ICFP '00 Proceedings of the fifth ACM SIGPLAN international conference on Functional programming
Visitor combination and traversal control
OOPSLA '01 Proceedings of the 16th ACM SIGPLAN conference on Object-oriented programming, systems, languages, and applications
Generic unification via two-level types and parameterized modules
Proceedings of the sixth ACM SIGPLAN international conference on Functional programming
Adaptive Object-Oriented Software: The Demeter Method with Propagation Patterns
Adaptive Object-Oriented Software: The Demeter Method with Propagation Patterns
Template meta-programming for Haskell
Proceedings of the 2002 ACM SIGPLAN workshop on Haskell
Typed Combinators for Generic Traversal
PADL '02 Proceedings of the 4th International Symposium on Practical Aspects of Declarative Languages
The Essence of the Visitor Pattern
COMPSAC '98 Proceedings of the 22nd International Computer Software and Applications Conference
Proceedings of the IFIP TC2/WG2.1 Working Conference on Generic Programming
Merging Monads and Folds for Functional Programming
Advanced Functional Programming, First International Spring School on Advanced Functional Programming Techniques-Tutorial Text
Advanced Functional Programming, Second International School-Tutorial Text
Higher-Order Intensional Type Analysis
ESOP '02 Proceedings of the 11th European Symposium on Programming Languages and Systems
de Bruijn notation as a nested datatype
Journal of Functional Programming
Tool support for refactoring functional programs
Haskell '03 Proceedings of the 2003 ACM SIGPLAN workshop on Haskell
XVF: C++ introspection by extensible visitation
ACM SIGPLAN Notices
Dependency-style generic haskell
ICFP '03 Proceedings of the eighth ACM SIGPLAN international conference on Functional programming
FreshML: programming with binders made simple
ICFP '03 Proceedings of the eighth ACM SIGPLAN international conference on Functional programming
ACM SIGPLAN Notices
Two-level types and parameterized modules
Journal of Functional Programming
Proceedings of the ninth ACM SIGPLAN international conference on 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
TLDI '05 Proceedings of the 2005 ACM SIGPLAN international workshop on Types in languages design and implementation
Proceedings of the 32nd ACM SIGPLAN-SIGACT symposium on Principles of programming languages
Translating curry to haskell system demo
Proceedings of the 2005 ACM SIGPLAN workshop on Curry and functional logic programming
Scrap your nameplate: (functional pearl)
Proceedings of the tenth ACM SIGPLAN international conference on Functional programming
Scrap your boilerplate with class: extensible generic functions
Proceedings of the tenth ACM SIGPLAN international conference on Functional programming
TypeCase: a design pattern for type-indexed functions
Proceedings of the 2005 ACM SIGPLAN workshop on Haskell
Type-directed weaving of aspects for higher-order functional languages
Proceedings of the 2006 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
Generic programming in Fortran
Proceedings of the 2006 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
A pattern for almost compositional functions
Proceedings of the eleventh ACM SIGPLAN international conference on Functional programming
Boxy types: inference for higher-rank types and impredicativity
Proceedings of the eleventh ACM SIGPLAN international conference on Functional programming
RepLib: a library for derivable type classes
Proceedings of the 2006 ACM SIGPLAN workshop on Haskell
A generic recursion toolbox for Haskell or: scrap your boilerplate systematically
Proceedings of the 2006 ACM SIGPLAN workshop on Haskell
An extensible dynamically-typed hierarchy of exceptions
Proceedings of the 2006 ACM SIGPLAN workshop on Haskell
Proceedings of the 2006 ACM SIGPLAN workshop on Generic programming
Context-parametric polykinded types
Proceedings of the 2006 ACM SIGPLAN workshop on Generic programming
Modular generic programming with extensible superclasses
Proceedings of the 2006 ACM SIGPLAN workshop on Generic programming
Scrap++: scrap your boilerplate in C++
Proceedings of the 2006 ACM SIGPLAN workshop on Generic programming
Journal of Functional Programming
Practical type inference for arbitrary-rank types
Journal of Functional Programming
Aspect-oriented programming with type classes
Proceedings of the 6th workshop on Foundations of aspect-oriented languages
A history of Haskell: being lazy with class
Proceedings of the third ACM SIGPLAN conference on History of programming languages
Transformation of structure-shy programs: applied to XPath queries and strategic functions
Proceedings of the 2007 ACM SIGPLAN symposium on Partial evaluation and semantics-based program manipulation
An update calculus for expressing type-safe program updates
Science of Computer Programming
Constructing language processors with algebra combinators
GPCE '07 Proceedings of the 6th international conference on Generative programming and component engineering
A lightweight interactive debugger for haskell
Haskell '07 Proceedings of the ACM SIGPLAN workshop on Haskell workshop
Uniform boilerplate and list processing
Haskell '07 Proceedings of the ACM SIGPLAN workshop on Haskell workshop
Why it's nice to be quoted: quasiquoting for haskell
Haskell '07 Proceedings of the ACM SIGPLAN workshop on Haskell workshop
Generics for the working ML'er
ML '07 Proceedings of the 2007 workshop on Workshop on ML
Modular and generic programming with interpreterlib
Proceedings of the twenty-second IEEE/ACM international conference on Automated software engineering
Normalize, transpose, and distribute: An automatic approach for handling nonscalars
ACM Transactions on Programming Languages and Systems (TOPLAS)
Parametric fortran: program generation in scientific computing
Journal of Software Maintenance and Evolution: Research and Practice
Coupled Transformation of Schemas, Documents, Queries, and Constraints
Electronic Notes in Theoretical Computer Science (ENTCS)
Expressive and safe static reflection with MorphJ
Proceedings of the 2008 ACM SIGPLAN conference on Programming language design and implementation
Stratego/XT 0.17. A language and toolset for program transformation
Science of Computer Programming
Haskell, do you read me?: constructing and composing efficient top-down parsers at runtime
Proceedings of the first ACM SIGPLAN symposium on Haskell
A lightweight approach to datatype-generic rewriting
Proceedings of the ACM SIGPLAN workshop on Generic programming
Proceedings of the ACM SIGPLAN workshop on Generic programming
Proceedings of the ACM SIGPLAN workshop on Generic programming
Bialgebra views: a way for polytypic programming to cohabit with data abstraction
Proceedings of the ACM SIGPLAN workshop on Generic programming
The Structure of the Essential Haskell Compiler, or Coping with Compiler Complexity
Implementation and Application of Functional Languages
Specifying Strategies for Exercises
Proceedings of the 9th AISC international conference, the 15th Calculemas symposium, and the 7th international MKM conference on Intelligent Computer Mathematics
A study of substitution, using nominal techniques and Fraenkel-Mostowksi sets
Theoretical Computer Science
Electronic Notes in Theoretical Computer Science (ENTCS)
A pattern for almost compositional functions
Journal of Functional Programming
Journal of Functional Programming
Commercial uses: Going functional on exotic trades
Journal of Functional Programming
Science of Computer Programming
Efficient and Type-Safe Generic Data Storage
Electronic Notes in Theoretical Computer Science (ENTCS)
A Haskell Hosted DSL for Writing Transformation Systems
DSL '09 Proceedings of the IFIP TC 2 Working Conference on Domain-Specific Languages
Controlled evolution of adaptive programs
Proceedings of the joint international and annual ERCIM workshops on Principles of software evolution (IWPSE) and software evolution (Evol) workshops
Generic programming with fixed points for mutually recursive datatypes
Proceedings of the 14th ACM SIGPLAN international conference on Functional programming
Polytypic properties and proofs in Coq
Proceedings of the 2009 ACM SIGPLAN workshop on Generic programming
What does aspect-oriented programming mean for functional programmers?
Proceedings of the 2009 ACM SIGPLAN workshop on Generic programming
Parametric datatype-genericity
Proceedings of the 2009 ACM SIGPLAN workshop on Generic programming
The architecture of the Utrecht Haskell compiler
Proceedings of the 2nd ACM SIGPLAN symposium on Haskell
Alloy: fast generic transformations for Haskell
Proceedings of the 2nd ACM SIGPLAN symposium on Haskell
Scrap your boilerplate: prologically!
PPDP '09 Proceedings of the 11th ACM SIGPLAN conference on Principles and practice of declarative programming
An Isabelle/HOL-based model of stratego-like traversal strategies
PPDP '09 Proceedings of the 11th ACM SIGPLAN conference on Principles and practice of declarative programming
Programming Errors in Traversal Programs Over Structured Data
Electronic Notes in Theoretical Computer Science (ENTCS)
The next 700 data description languages
Journal of the ACM (JACM)
A survey of strategies in rule-based program transformation systems
Journal of Symbolic Computation
Constructing language processors with algebra combinators
Science of Computer Programming
Comparing approaches to generic programming in Haskell
SSDGP'06 Proceedings of the 2006 international conference on Datatype-generic programming
SSDGP'06 Proceedings of the 2006 international conference on Datatype-generic programming
A generic programming toolkit for PADS/ML: first-class upgrades for third-party developers
PADL'08 Proceedings of the 10th international conference on Practical aspects of declarative languages
Libraries for generic programming in haskell
AFP'08 Proceedings of the 6th international conference on Advanced functional programming
Type-directed weaving of aspects for polymorphically typed functional languages
Science of Computer Programming
Scrap your zippers: a generic zipper for heterogeneous types
Proceedings of the 6th ACM SIGPLAN workshop on Generic programming
Algorithms for traversal-based generic programming
Proceedings of the 6th ACM SIGPLAN workshop on Generic programming
Morphing: Structurally shaping a class by reflecting on others
ACM Transactions on Programming Languages and Systems (TOPLAS)
Formal polytypic programs and proofs
Journal of Functional Programming
Scala for generic programmers: Comparing haskell and scala support for generic programming
Journal of Functional Programming
A lightweight approach to datatype-generic rewriting
Journal of Functional Programming
Proceedings of the 14th International Conference on Database Theory
Lightweight language processing in Kiama
GTTSE'09 Proceedings of the 3rd international summer school conference on Generative and transformational techniques in software engineering III
Algebraic Specialization of Generic Functions for Recursive Types
Electronic Notes in Theoretical Computer Science (ENTCS)
Transformation of structure-shy programs with application to XPath queries and strategic functions
Science of Computer Programming
2-Dimensional Directed Type Theory
Electronic Notes in Theoretical Computer Science (ENTCS)
Orthogonal serialisation for Haskell
IFL'10 Proceedings of the 22nd international conference on Implementation and application of functional languages
Iterative and parallel algorithm design from high level language traces
ICCS'05 Proceedings of the 5th international conference on Computational Science - Volume Part III
“Scrap your boilerplate” reloaded
FLOPS'06 Proceedings of the 8th international conference on Functional and Logic Programming
TLDI '12 Proceedings of the 8th ACM SIGPLAN workshop on Types in language design and implementation
Declarative programming with function patterns
LOPSTR'05 Proceedings of the 15th international conference on Logic Based Program Synthesis and Transformation
Strategic term rewriting and its application to a VDM-SL to SQL conversion
FM'05 Proceedings of the 2005 international conference on Formal Methods
Outsidein(x) modular type inference with local assumptions
Journal of Functional Programming - Dedicated to ICFP 2009
Dynamic construction of generic functions
IFL'04 Proceedings of the 16th international conference on Implementation and Application of Functional Languages
Preprocessing eden with template haskell
GPCE'05 Proceedings of the 4th international conference on Generative Programming and Component Engineering
Polytypic programming in haskell
IFL'03 Proceedings of the 15th international conference on Implementation of Functional Languages
Typing haskell with an attribute grammar
AFP'04 Proceedings of the 5th international conference on Advanced Functional Programming
Epigram: practical programming with dependent types
AFP'04 Proceedings of the 5th international conference on Advanced Functional Programming
Refactoring functional programs
AFP'04 Proceedings of the 5th international conference on Advanced Functional Programming
Type-safe two-level data transformation
FM'06 Proceedings of the 14th international conference on Formal Methods
Mappings make data processing go 'round
GTTSE'05 Proceedings of the 2005 international conference on Generative and Transformational Techniques in Software Engineering
“Scrap your boilerplate” revolutions
MPC'06 Proceedings of the 8th international conference on Mathematics of Program Construction
MPC'06 Proceedings of the 8th international conference on Mathematics of Program Construction
Coupled schema transformation and data conversion for XML and SQL
PADL'07 Proceedings of the 9th international conference on Practical Aspects of Declarative Languages
A functional approach to generic programming using adaptive traversals
Higher-Order and Symbolic Computation
A pattern for almost homomorphic functions
Proceedings of the 8th ACM SIGPLAN workshop on Generic programming
The right kind of generic programming
Proceedings of the 8th ACM SIGPLAN workshop on Generic programming
The HERMIT in the machine: a plugin for the interactive transformation of GHC core language programs
Proceedings of the 2012 Haskell Symposium
Template your boilerplate: using template haskell for efficient generic programming
Proceedings of the 2012 Haskell Symposium
Surveyor: a DSEL for representing and analyzing strongly typed surveys
Proceedings of the 2012 Haskell Symposium
Proceedings of the 2012 Haskell Symposium
Shake before building: replacing make with haskell
Proceedings of the 17th ACM SIGPLAN international conference on Functional programming
Practical typed lazy contracts
Proceedings of the 17th ACM SIGPLAN international conference on Functional programming
A generic abstract syntax model for embedded languages
Proceedings of the 17th ACM SIGPLAN international conference on Functional programming
Multifocal: a strategic bidirectional transformation language for XML schemas
ICMT'12 Proceedings of the 5th international conference on Theory and Practice of Model Transformations
Synthesizing iterators from abstraction functions
Proceedings of the 11th International Conference on Generative Programming and Component Engineering
Proceedings of the Twelfth Workshop on Language Descriptions, Tools, and Applications
Incompleteness-aware programming with RDF data
DDFP '13 Proceedings of the 2013 workshop on Data driven functional programming
Typed syntactic meta-programming
Proceedings of the 18th ACM SIGPLAN international conference on Functional programming
New equations for neutral terms: a sound and complete decision procedure, formalized
Proceedings of the 2013 ACM SIGPLAN workshop on Dependently-typed programming
Proceedings of the 9th ACM SIGPLAN workshop on Generic programming
Multi-polymorphic programming in bondi
Proceedings of the 9th ACM SIGPLAN workshop on Generic programming
Programming errors in traversal programs over structured data
Science of Computer Programming
Proceedings of the ACM SIGPLAN 2014 Workshop on Partial Evaluation and Program Manipulation
Hi-index | 0.01 |
We describe a design pattern for writing programs that traverse data structures built from rich mutually-recursive data types. Such programs often have a great deal of "boilerplate" code that simply walks the structure, hiding a small amount of "real" code that constitutes the reason for the traversal.Our technique allows most of this boilerplate to be written once and for all, or even generated mechanically, leaving the programmer free to concentrate on the important part of the algorithm. These generic programs are much more adaptive when faced with data structure evolution because they contain many fewer lines of type-specific code.Our approach is simple to understand, reasonably efficient, and it handles all the data types found in conventional functional programming languages. It makes essential use of rank-2 polymorphism, an extension found in some implementations of Haskell. Further it relies on a simple type-safe cast operator.