Reference. Fantastic Morphisms and Where to Find Them: A Guide to Recursion Schemes
Cite
Cites 53 works (5 here)
With notes (5)
How to design co-programs gibbons-2021-how
The observation that program structure follows data structure is a key lesson in introductory programming: good hints for possible program designs can be found by considering the structure of the data concerned. In particular, this lesson is a core message of the influential textbook “How to Design Programs” by Felleisen, Findler, Flatt, and Krishnamurthi. However, that book discusses using only the structure of input data for guiding program design, typically leading towards structurally recursive programs. We argue that novice programmers should also be taught to consider the structure of output data, leading them also towards structurally corecursive programs.
Algorithm Design with Haskell bird-2020-algorithm
Conjugate Hylomorphisms -- Or: The Mother of All Structured Recursion Schemes hinze-2015-conjugate
Folding domain-specific languages: deep and shallow embeddings (functional Pearl) gibbons-2014-folding
Adjoint folds and unfolds—An extended study hinze-2013-adjoint
External (48)
- Coding with Asymmetric Numeral Systems (2019)
- How to Design Programs: An Introduction to Programming and Computing (2018)
- Unifying structured recursion schemes: An extended study (2016)
- A duality of sorts (2013)
- Histo- and dynamorphisms revisited (2013)
- Unifying structured recursion schemes (ICFP 2013) (2013)
- Generic Programming with Adjunctions (2012)
- Sorting with bialgebras and distributive laws (2012)
- recursion-schemes: Representing common recursion patterns as higher-order functions (software) (2011)
- Pearls of Functional Algorithm Design (2010)
- A principled approach to programming with nested types in Haskell (2009)
- Foundations for structured programming with GADTs (2008)
- Comonadic Notions of Computation (2008)
- Time for chronomorphisms (blog post) (2008)
- Stream fusion: From lists to streams to nothing at all (2007)
- Metamorphisms: Streaming representation-changers (2007)
- Initial algebra semantics is enough! (2007)
- Recursive coalgebras from comonads (2006)
- Recursion Schemes for Dynamic Programming (2006)
- Iteration and coiteration schemes for higher-order and nested datatypes (2005)
- Combining datatypes and effects (2005)
- Fun with phantom types (2003)
- Generic Accumulations (2003)
- Recursion schemes from comonads (2001)
- A survey of longest common subsequence algorithms (2000)
- Generic downwards accumulations (2000)
- Generalised folds for nested datatypes (1999)
- de Bruijn notation as a nested datatype (1999)
- Calculating accumulations (1999)
- Primitive (Co)Recursion and Course-of-Value (Co)Iteration, Categorically (1999)
- Nested datatypes (1998)
- Fold and unfold for program semantics (1998)
- Monadic Corecursion —Definition, Fusion Laws, and Applications— (1998)
- FUNCTIONAL PROGRAMMING WITH APOMORPHISMS (CORECURSION) (1998)
- Algebra of Programming (1997)
- Deriving structural hylomorphisms from recursive definitions (1996)
- Purely functional random-access lists (1995)
- Monadic maps and folds for arbitrary datatypes (1994)
- Paramorphisms (1992)
- Law and Order in Algorithmics (PhD thesis) (1992)
- Functional programming with bananas, lenses, envelopes and barbed wire (1991)
- Data structures and program transformation (1990)
- Tupling and mutumorphisms (1990)
- Algebraic Data Types and Program Transformation (PhD thesis) (1990)
- First Steps Towards the Theory of Rose Trees (1988)
- Category Theoretic Approach to Data Types (PhD thesis) (1987)
- Notes on Data Structuring (1972)
- A fixpoint theorem for complete categories (1968)