## Initial algebra semantics is enough (2007)

Venue: | Proceedings, Typed Lambda Calculus and Applications |

Citations: | 10 - 5 self |

### BibTeX

@INPROCEEDINGS{Johann07initialalgebra,

author = {Patricia Johann and Neil Ghani},

title = {Initial algebra semantics is enough},

booktitle = {Proceedings, Typed Lambda Calculus and Applications},

year = {2007},

pages = {207--222}

}

### OpenURL

### Abstract

Abstract. Initial algebra semantics is a cornerstone of the theory of modern functional programming languages. For each inductive data type, it provides a fold combinator encapsulating structured recursion over data of that type, a Church encoding, a build combinator which constructs data of that type, and a fold/build rule which optimises modular programs by eliminating intermediate data of that type. It has long been thought that initial algebra semantics is not expressive enough to provide a similar foundation for programming with nested types. Specifically, the folds have been considered too weak to capture commonly occurring patterns of recursion, and no Church encodings, build combinators, or fold/build rules have been given for nested types. This paper overturns this conventional wisdom by solving all of these problems. 1

### Citations

513 | Categories for the working mathematician - MacLane - 1971 |

201 | A short cut to deforestation - Gill, Launchbury, et al. - 1993 |

163 | The view from the left - McBride, McKinna |

150 | Abstract syntax and variable binding - Fiore, Plotkin, et al. |

93 | Shortcut deforestation in calculational form - Takano, Meijer - 1995 |

83 | L.: Nested datatypes
- Bird, Meertens
- 1998
(Show Context)
Citation Context ... On the other hand, build takes as input a type-independent template for constructing “abstract” lists and produces a corresponding “concrete” list. Thus, build (\c n ->c 4 (c 7 n)) produces the list =-=[4,7]-=-. List transformers can be written in terms of both foldr and build. For example, the standard map function for lists can be implemented as map :: (a -> b) -> [a] -> [b] map f xs = build (\c n -> fold... |

81 | Monadic presentations of lambda-terms using generalized inductive types - Altenkirch, Reus - 1999 |

77 | Parametric polymorphism and operational equivalence - Pitts - 2000 |

71 | R.: De Bruijn notation as a nested datatype - Bird, Paterson - 1999 |

67 | Cheap Deforestation for Non-strict Functional Languages - Gill - 1996 |

24 | Manufacturing datatypes - Hinze - 2001 |

17 | A generalization of short-cut fusion and its correctness proof - Johann |

16 | Monadic augment and generalised short cut fusion - Ghani, Johann, et al. - 2005 |

14 | Polytypic functions over nested datatypes (extended abstract - Hinze - 1999 |

12 | Efficient generalized folds - Hinze - 2000 |

11 | R.: Generalised folds for nested datatypes. Formal Aspects of Computing 11(2 - Bird, Paterson - 1999 |

10 | Functional Pearl: Perfect trees and bit-reversal permutations - Hinze |

6 |
Structured Recursion for Non-uniform Data-types
- Blampied
- 2000
(Show Context)
Citation Context ... On the other hand, build takes as input a type-independent template for constructing “abstract” lists and produces a corresponding “concrete” list. Thus, build (\c n ->c 4 (c 7 n)) produces the list =-=[4,7]-=-. List transformers can be written in terms of both foldr and build. For example, the standard map function for lists can be implemented as map :: (a -> b) -> [a] -> [b] map f xs = build (\c n -> fold... |

5 | Iteration schemes for higher-order and nested datatypes, Theoretical Computer Science 333 - Abel, Matthes, et al. - 2005 |

5 | I.: Disciplined, efficient, generalised folds for nested datatypes. Formal Aspects of Computing 16(1 - Martin, Gibbons, et al. - 2004 |

4 | Generic Operations on Nested Datatypes - Bayley - 2001 |

2 | Representing cyclic structures as nested types. Presented at Trends - Ghani, Haman, et al. - 2006 |