Skip to main content

Datatype-Generic Programming

  • Conference paper
Datatype-Generic Programming (SSDGP 2006)

Part of the book series: Lecture Notes in Computer Science ((LNTCS,volume 4719))

Included in the following conference series:

Abstract

Generic programming aims to increase the flexibility of programming languages, by expanding the possibilities for parametrization — ideally, without also expanding the possibilities for uncaught errors. The term means different things to different people: parametric polymorphism, data abstraction, meta-programming, and so on. We use it to mean polytypism, that is, parametrization by the shape of data structures rather than their contents. To avoid confusion with other uses, we have coined the qualified term datatype-generic programming for this purpose. In these lecture notes, we expand on the definition of datatype-generic programming, and present some examples of datatype-generic programs. We also explore the connection with design patterns in object-oriented programming; in particular, we argue that certain design patterns are just higher-order datatype-generic programs.

This is a preview of subscription content, log in via an institution to check access.

Access this chapter

Chapter
USD 29.95
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
eBook
USD 39.99
Price excludes VAT (USA)
  • Available as PDF
  • Read on any device
  • Instant download
  • Own it forever
Softcover Book
USD 54.99
Price excludes VAT (USA)
  • Compact, lightweight edition
  • Dispatched in 3 to 5 business days
  • Free shipping worldwide - see info

Tax calculation will be finalised at checkout

Purchases are for personal use only

Institutional subscriptions

Preview

Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.

References

  1. Reference manual for the Ada programming language. American National Standards Institute, Inc., ANSI/MIL-STD-1815A-1983 (1983)

    Google Scholar 

  2. Aigner, M., Ziegler, G.M.: Proofs from The Book, 3rd edn. Springer, Heidelberg (2004)

    Book  MATH  Google Scholar 

  3. Alexandrescu, A.: Modern C++ Design. Addison-Wesley, Reading (2001)

    Google Scholar 

  4. Austern, M.: Generic Programming and the STL: Using and Extending the C++ Standard Template Library. Addison-Wesley, Reading (1998)

    Google Scholar 

  5. Backhouse, R.C., Carré, B.A.: Regular algebra applied to path-finding problems. Journal of the Institute of Mathematics and Applications 15, 161–186 (1975)

    Article  MathSciNet  MATH  Google Scholar 

  6. Backhouse, R., Hoogendijk, P.: FIP TC2/WG2.1 State-of-the-Art Report on Formal Program Development. In: Möller, B., Schuman, S., Partsch, H. (eds.) Formal Program Development. LNCS, vol. 755, pp. 7–42. Springer, Heidelberg (1993)

    Chapter  Google Scholar 

  7. Backhouse, R.C., Jansson, P., Jeuring, J., Meertens, L.G.L.T.: Generic programming: An introduction. In: Swierstra, S.D., Oliveira, J.N. (eds.) AFP 1998. LNCS, vol. 1608, pp. 28–115. Springer, Heidelberg (1999)

    Chapter  Google Scholar 

  8. Bidoit, M., Mosses, P.: User Manual. In: Bidoit, M., Mosses, P.D. (eds.) CASL User Manual. LNCS, vol. 2900, Springer, Heidelberg (2004)

    Chapter  Google Scholar 

  9. Bird, R., de Moor, O.: The Algebra of Programming. Prentice-Hall, Englewood Cliffs (1996)

    Book  MATH  Google Scholar 

  10. Bird, R., de Moor, O., Hoogendijk, P.: Generic functional programming with types and relations. Journal of Functional Programming 6(1), 1–28 (1996)

    Article  MathSciNet  MATH  Google Scholar 

  11. Bird, R.S.: Using circular programs to eliminate multiple traversals of data. Acta Informatica 21, 239–250 (1984)

    Article  MATH  Google Scholar 

  12. Bird, R.S.: Lectures on constructive functional programming. In: Broy, M. (ed.) Constructive Methods in Computer Science, pp. 151–218. Springer, Heidelberg Also available as Technical Monograph PRG-69, from the Programming Research Group, Oxford University (1988)

    Google Scholar 

  13. Bracha, G., Cohen, N., Kemper, C., Marx, S., Odersky, M., Panitz, S.-E., Stoutamire, D., Thorup, K., Wadler, P.: Add generic types to the Java programming language (April 2001), JSR 14 http://www.jcp.org /en/jsr/detail?id=014

  14. Bronstein, M., Burge, W., Daly, T., Davenport, J., Dewar, M., Dunstan, M., Fortenbacher, A., Gianni, P., Grabmeier, J., Guidry, J., Jenks, R., Lambe, L., Monagan, M., Morrison, S., Sit, W., Steinbach, J., Sutor, R., Trager, B., Watt, S., Wen, J., Williamson, C.: The Thirty-Year Horizon (2003), http://wiki.axiom-developer.org /Mirrors?go=/public/book2.pdf

  15. Buchlovsky, P., Thielecke, H.: A type-theoretic reconstruction of the Visitor pattern. In: 21st Conference on Mathematical Foundations of Programming Semantics. Electronic Notes in Theoretical Computer Science, vol. 155 (2005)

    Google Scholar 

  16. Cardelli, L., Wegner, P.: On understanding types, data abstraction and polymorphism. ACM Computing Surveys 17(4), 471–522 (1985)

    Article  Google Scholar 

  17. Cheney, J., Hinze, R.: A lightweight implementation of generics and dynamics. In: Haskell Workshop, pp. 90–104 (2002)

    Google Scholar 

  18. Claessen, K., Hughes, J.: Specification based testing with QuickCheck. In: Gibbons, de Moor[45], pp. 17–40

    Google Scholar 

  19. Clarke, D., Löh, A., Haskell, G.: specifically. In: Gibbons, Jeuring [47], pp. 21–47

    Google Scholar 

  20. Mosses, P.D. (ed.): CASL Reference Manual. LNCS, vol. 2960. Springer, Heidelberg (2004)

    MATH  Google Scholar 

  21. Cormen, T.H., Leiserson, C.E., Rivest, R.L.: Introduction to Algorithms. MIT Press, Cambridge (1990)

    MATH  Google Scholar 

  22. Czarnecki, K., Eisenecker, U.: Generative Programming: Methods, Tools and Applications. Addison-Wesley, Reading (2000)

    Google Scholar 

  23. Damas, L., Milner, R.: Principal type schemes for functional programs. In: Principles of Programming Languages, pp. 207–212 (1982)

    Google Scholar 

  24. Day, N., Launchbury, J., Lewis, J.: Logical abstractions in haskell. In: Haskell Workshop. Utrecht University Department of Computer Science, Technical Report UU-CS-1999-28 (October 1999)

    Google Scholar 

  25. Dehnert, J., Stepanov, A.: Fundamentals of generic programming. In: Jazayeri, M., Musser, D.R., Loos, R.G.K. (eds.) Generic Programming. LNCS, vol. 1766, pp. 1–11. Springer, Heidelberg (2000)

    Chapter  Google Scholar 

  26. dos Santos Oliveira, B.C., Gibbons, J.: TypeCase: A design pattern for type-indexed functions. In: Leijen, D. (ed.) Haskell Workshop (2005)

    Google Scholar 

  27. Edmonds, J.: Matroids and the Greedy Algorithm. Mathematical Programming 1, 125–136 (1971)

    Article  MathSciNet  MATH  Google Scholar 

  28. Ehrig, H., Mahr, B.: Fundamentals of Algebraic Specification 1: Equations and Initial Semantics. Springer, Heidelberg (1985)

    Book  MATH  Google Scholar 

  29. Ehrig, H., Mahr, B.: Fundamentals of Algebraic Specification 2: Module Specifications and Constraints. Springer, Heidelberg (1990)

    Book  MATH  Google Scholar 

  30. Fokkinga, M.: Monadic maps and folds for arbitrary datatypes. Department INF, Universiteit Twente (June 1994)

    Google Scholar 

  31. Fokkinga, M.M.: Tupling and mutumorphisms. The Squiggolist 1(4), 81–82 (1990)

    Google Scholar 

  32. Fokkinga, M.M., Meijer, E.: Program calculation properties of continuous algebras. Technical Report CS-R9104, CWI, Amsterdam (January 1991)

    Google Scholar 

  33. Forman, I.R., Danforth, S.: Putting Metaclasses to Work. Addison-Wesley, Reading (1999)

    Google Scholar 

  34. Gamma, E., Beck, K.: JUnit: Testing resources for extreme programming (2000), http://www.junit.org/

  35. Gamma, E., Helm, R., Johnson, R., Vlissides, J.: Design Patterns: Elements of Reusable Object-Oriented Software. Addison-Wesley, Reading (1995)

    MATH  Google Scholar 

  36. Ghani, N., Uustalu, T., Vene, V.: Build, augment and destroy, universally. In: Chin, W.-N. (ed.) APLAS 2004. LNCS, vol. 3302, Springer, Heidelberg (2004)

    Chapter  Google Scholar 

  37. Gibbons, J.: Calculating functional programs. In: Blackhouse, R., Crole, R.L., Gibbons, J. (eds.) Algebraic and Coalgebraic Methods in the Mathematics of Program Construction. LNCS, vol. 2297, pp. 148–203. Springer, Heidelberg (2002)

    Chapter  Google Scholar 

  38. Gibbons, J.: Origami programming. In Gibbons, de Moor [45], pp. 41–60

    Google Scholar 

  39. Gibbons, J.: Design patterns as higher-order datatype-generic programs (June 2005), Tutorial presented at ECOOP, http://2005.ecoop.org /8.html

  40. Gibbons, J.: Design patterns as higher-order datatype-generic programs (October 2005), Tutorial presented at OOPSLA, http://www.oopsla.org /2005/ShowEvent.do?id=121

  41. Gibbons, J.: Design patterns as higher-order datatype-generic programs. In: Hinze, R. (ed.) Workshop on Generic Programming (September 2006)

    Google Scholar 

  42. Gibbons, J.: Metamorphisms: Streaming representation-changers. Science of Computer Programming 65, 108–139 (2007)

    Article  MathSciNet  MATH  Google Scholar 

  43. Gibbons, J., Backhouse, R., Oliveira, B., Reig, F.: Datatype-generic programming project (2003), http://web.comlab.ox.ac.uk /oucl/research/pdt/ap/dgp/

  44. Gibbons, J., Oliveira, B.C.d.S.: The essence of the Iterator pattern. In: Uustalu, T., McBride, C. (eds.) Mathematically-Structured Functional Programming (2006)

    Google Scholar 

  45. Gibbons, J., de Moor, O. (eds.).: The Fun of Programming. Cornerstones in Computing, Palgrave (2003), ISBN 1-4039-0772-2

    Google Scholar 

  46. Gibbons, J., Hutton, G., Altenkirch, T.: When is a function a fold or an unfold? Electronic Notes in Theoretical Computer Science. In: Proceedings of Coalgebraic Methods in Computer Science, vol. 44(1) (2001)

    Google Scholar 

  47. Gibbons, J., Jeuring, J.: Generic Programming. Kluwer Academic Publishers, Dordrecht (2003)

    Book  MATH  Google Scholar 

  48. Gibbons, J., Jones, G.: The under-appreciated unfold. In: Proceedings of the Third ACM SIGPLAN International Conference on Functional Programming, pp. 273–279, Baltimore, Maryland (September 1998)

    Google Scholar 

  49. Gibbons, J., Lester, D., Bird, R.: Enumerating the rationals. Journal of Functional Programming 16, 281–291 (2006)

    Article  MATH  Google Scholar 

  50. Gill, A., Launchbury, J., Peyton Jones, S.: A short cut to deforestation. In: Functional Programming Languages and Computer Architecture (1993)

    Google Scholar 

  51. Girard, J.-Y.: Interprétation Fonctionnelle et Élimination des Coupures de l’Arithmétique d’Ordre Supérieur. PhD thesis, Université de Paris VII (1972)

    Google Scholar 

  52. Gorlatch, S., Lengauer, C.: Parallelization of divide-and-conquer in the Bird-Meertens Formalism. Formal Aspects of Computing 3 (1995)

    Google Scholar 

  53. Gregor, D., Järvi, J., Siek, J.G., Reis, G.D., Stroustrup, B., Lumsdaine, A.: Concepts: Linguistic support for generic programming in C++. In: Object-Oriented Programming, Systems, Languages, and Applications (2006)

    Google Scholar 

  54. Gregor, D., Schupp, S.: Making the usage of STL safe. In: Gibbons, Jeuring [47], pp. 127–140

    Google Scholar 

  55. Guttag, J.V., Horning, J.J., Garland, S.J., Jones, K.D., Modet, A., Wing, J.M.: Larch: Languages and Tools for Formal Specification. Texts and Monographs in Computer Science. Springer, New York (1993)

    Book  Google Scholar 

  56. Hagino, T.: A Categorical Programming Language. PhD thesis, Department of Computer Science, University of Edinburgh (September 1987)

    Google Scholar 

  57. Hinze, R.: Polytypic values possess polykinded types. In: Backhouse, R.C., Oliveira, J.N. (eds.) MPC 2000. LNCS, vol. 1837, pp. 2–27. Springer, Heidelberg (2000)

    Chapter  Google Scholar 

  58. Hinze, R.: Generics for the masses. In: International Conference on Functional Programming, pp. 236–243. ACM Press, New York (2004)

    Google Scholar 

  59. Hinze, R.: Church numerals, twice! Journal of Functional Programming 15(1), 1–13 (2005)

    Article  MATH  Google Scholar 

  60. Hinze, R., Jeuring, J.: Generic Haskell: Practice and theory. In: Backhouse, R., Gibbons, J. (eds.) Generic Programming. LNCS, vol. 2793, pp. 1–56. Springer, Heidelberg (2003)

    Chapter  Google Scholar 

  61. Hinze, R., Jeuring, J., Löh, A.: Comparing approaches to generic programming in Haskell. In this volume (2006)

    Google Scholar 

  62. Hinze, R., Peyton Jones, S.: Derivable type classes. In: Haskell Workshop (2000)

    Google Scholar 

  63. Hinze, R., Löh, A.: Generic programming, now! In this volume (2006)

    Google Scholar 

  64. Hoare, C.A.R.: Notes on data structuring. In: Dahl, O.-J., Dijkstra, E.W., Hoare, C.A.R. (eds.) Structured Programming, APIC studies in data processing, pp. 83–174. Academic Press, London (1972)

    Google Scholar 

  65. Hoogendijk, P., Backhouse, R.: When do datatypes commute? In: Moggi, E., Rosolini, G. (eds.) CTCS 1997. LNCS, vol. 1290, pp. 242–260. Springer, Heidelberg (1997)

    Chapter  Google Scholar 

  66. Hughes, J.: Why functional programming matters. Computer Journal 32(2), 98–107 (1989)

    Article  Google Scholar 

  67. Iverson, K.E.: A Programming Language. Wiley, Chichester (1962)

    Book  MATH  Google Scholar 

  68. Jansson, P., Jeuring, J.: PolyP - a polytypic programming language extension. In: Principles of Programming Languages, pp. 470–482 (1997)

    Google Scholar 

  69. Jansson, P.: Functional Polytypic Programming. PhD thesis, Computing Science, Chalmers University of Technology and Göteborg University, Sweden (May 2000)

    Google Scholar 

  70. Jansson, P., Jeuring, J.: Polytypic data conversion programs. Science of Computer Programming 43(1), 35–75 (2002)

    Article  MathSciNet  MATH  Google Scholar 

  71. Jay, B., Steckler, P.: The functional imperative: Shape! In: Hankin, C. (ed.) ESOP 1998 and ETAPS 1998. LNCS, vol. 1381, pp. 139–153. Springer, Heidelberg (1998)

    Chapter  Google Scholar 

  72. Jay, C.B.: A semantics for shape. Science of Computer Programming 25(2-3), 251–283 (1995)

    Article  MathSciNet  MATH  Google Scholar 

  73. Jenks, R.D., Sutor, R.S.: Axiom: The Scientific Computing System. Springer, Heidelberg (1992)

    MATH  Google Scholar 

  74. Jensen, K., Wirth, N.: Pascal User Manual and Report. Springer, Heidelberg (1975)

    Book  MATH  Google Scholar 

  75. Jesperson, H.: POSIX shell and utilities (p1003.2) (September 1991), Draft 11.2 http://www.nic.funet.fi /pub/doc/posix/p1003.2/

  76. Jeuring, J., Meijer, E. (eds.): Advanced Functional Programming. LNCS, vol. 925. Springer, Heidelberg (1995)

    Google Scholar 

  77. Jones, M.P., Duponcheel, L.: Composing monads. Technical Report RR-1004, Department of Computer Science, Yale (December 1993)

    Google Scholar 

  78. Kabanov, J., Vene, V.: Recursion schemes for dynamic programming. In: Uustalu, T. (ed.) MPC 2006. LNCS, vol. 4014, Springer, Heidelberg (2006)

    Chapter  Google Scholar 

  79. Kahn, J.: It’s alive! Wired, 10.03:72-77 (March 2002)

    Google Scholar 

  80. Kennedy, A., Syme, D.: Design and implementation of generics for the.NET Common Language Runtime. In: Programming Language Design and Implementation, Snowbird, Utah, pp. 1–12 (2001)

    Google Scholar 

  81. Kiczales, G., des Riviéres, J., Bobrow, D.G.: The Art of the Metaobject Protocol. MIT Press, Cambridge (1991)

    Google Scholar 

  82. Kiczales, G., Lamping, J., Menhdhekar, A., Maeda, C., Lopes, C., Loingtier, J.-M., Irwin, J.: Aspect-oriented programming. In: Aksit, M., Matsuoka, S. (eds.) ECOOP 1997. LNCS, vol. 1241, pp. 220–242. Springer, Heidelberg (1997)

    Chapter  Google Scholar 

  83. King, D.J., Wadler, P.: Combining monads. In: Launchbury, J., Sansom, P.M. (eds.) Functional Programming, Glasgow 1992, Springer, Heidelberg (1993)

    Google Scholar 

  84. Kiselyov, O., Lämmel, R.: Haskell’s Overlooked Object System. Technical Report cs/0509027, arXiv.org (September 2005)

    Google Scholar 

  85. Korte, B., Lovász, L., Schrader, R.: Greedoids. Springer, Heidelberg (1991)

    Book  MATH  Google Scholar 

  86. Kühne, T.: Internal iteration externalized. In: Guerraoui, R. (ed.) ECOOP 1999. LNCS, vol. 1628, pp. 329–350. Springer, Heidelberg (1999)

    Chapter  Google Scholar 

  87. Lazic, R.: A Semantic Study of Data Independence with Applications to Model Checking. D.Phil. thesis, Oxford University Computing Laboratory (1999)

    Google Scholar 

  88. Lazic, R., Nowak, D.: On a semantic definition of data independence. In: Hofmann, M.O. (ed.) TLCA 2003. LNCS, vol. 2701, pp. 226–240. Springer, Heidelberg Technical Report CS-RR-392, Department of Computer Science, University of Warwick (2003)

    Chapter  Google Scholar 

  89. Liskov, B.: A history of CLU. ACM SIGPLAN Notices 28(3), 133–147 (1993)

    Article  Google Scholar 

  90. Liskov, B., Guttag, J.: Abstraction and Specification in Program Development. MIT Electrical Engineering and Computer Science Series. MIT Press, Cambridge (1986)

    MATH  Google Scholar 

  91. Löh, A.:Exploring Generic Haskell. PhD thesis, Utrecht University (2004)

    Google Scholar 

  92. Malcolm, G.: Data structures and program transformation. Science of Computer Programming 14, 255–279 (1990)

    Article  MathSciNet  MATH  Google Scholar 

  93. Martin, U., Nipkow, T.: Automating Squiggol. In: Broy, M., Jones, C.B. (eds.) IFIP TC2 Working Conference on Programming Concepts and Methods, Sea of Galilee, Israel, pp. 233–246. North-Holland, Amsterdam (1990)

    Google Scholar 

  94. McBride, C.: Naperian functors. Personal communication by email (5th April 2006)

    Google Scholar 

  95. McBride, C., Paterson, R.: Applicative programming with effects. Journal of Functional Programming (to appear)

    Google Scholar 

  96. McKinna, J.: Why dependent types matter. In: Principles of Programming Languages (2006)

    Google Scholar 

  97. Meacham, J.: DrIFT homepage (2004), http://repetae.net /~john/computer/haskell/DrIFT/

  98. Meertens, L.: Paramorphisms. Formal Aspects of Computing 4(5), 413–424 (1992)

    Article  MATH  Google Scholar 

  99. Meertens, L.: Calculate polytypically! In: Kuchen, H., Swierstra, S.D. (eds.) PLILP 1996. LNCS, vol. 1140, pp. 1–16. Springer, Heidelberg (1996)

    Chapter  Google Scholar 

  100. Meertens, L.: Functor pulling. In: Backhouse, R., Sheard, T. (eds.) Workshop on Generic Programming, Marstrand, Sweden (1998)

    Google Scholar 

  101. Meijer, E., Fokkinga, M., Paterson, R.: Functional programming with bananas, lenses, envelopes and barbed wire. In: Hughes, J. (ed.) Functional Programming Languages and Computer Architecture. LNCS, vol. 523, pp. 124–144. Springer, Heidelberg (1991)

    Chapter  Google Scholar 

  102. Meijer, E., Jeuring, J.: Merging monads and folds for functional programming. In: Jeuring and Meijer [76]

    Google Scholar 

  103. Milner, R.: A theory of type polymorphism in programming. Journal of Computer and System Sciences 17, 348–375 (1978)

    Article  MathSciNet  MATH  Google Scholar 

  104. Milner, R., Tofte, M., Harper, R., MacQueen, D.: Definition of Standard ML. revised edn., MIT Press, Cambridge (1997)

    Google Scholar 

  105. Moggi, E.: Notions of computation and monads. Information and Computation 93(1) (1991)

    Google Scholar 

  106. Moggi, E., Bellé, G., Barry Jay, C.: shapely functors and traversals. In: Hoffman, M., Pavlovic, D., Rosolini, P. (eds.) Category Theory in Computer Science (1999)

    Google Scholar 

  107. Musser, D.R., Stepanov, A.A.: The Ada Generic Library linear list processing packages. Springer, New York (1989)

    Book  MATH  Google Scholar 

  108. Naur, P., Backus, J.W., Bauer, F.L., Green, J., Katz, C., McCarthy, J., Perlis, A.J., Rutishauser, H., Samelson, K., Vauquois, B., Wegstein, J.H., van Wijngaarden, A., Woodger, M.: Revised report on the algorithmic language ALGOL 60. Communications of the ACM 6(1), 1–17 (1963)

    Article  MATH  Google Scholar 

  109. Pardo, A.: Fusion of recursive programs with computation effects. Theoretical Computer Science 260, 165–207 (2001)

    Article  MathSciNet  MATH  Google Scholar 

  110. Pardo, A.: Combining datatypes and effects. In: Vene, V., Uustalu, T. (eds.) AFP 2004. LNCS, vol. 3622, pp. 171–209. Springer, Heidelberg (2005)

    Chapter  Google Scholar 

  111. Perlis, A.J., Samelson, K.: Preliminary report: International Algebraic Language. Communications of the ACM 1(12), 8–22 (1958)

    Article  MATH  Google Scholar 

  112. Peyton Jones, S.: The Haskell 98 Language and Libraries: The Revised Report. Cambridge University Press, Cambridge (2003)

    MATH  Google Scholar 

  113. Peyton Jones, S., Vytiniotis, D., Weirich, S., Washburn, G.: Simple unification-based type inference for generalized algebraic data types. In: International Conference on Functional Programming (2006)

    Google Scholar 

  114. Peyton Jones, S., Wadler, P.: Imperative functional programming. In: Principles of Programming Languages, pp. 71–84 (1993)

    Google Scholar 

  115. Programatica Team. Programatica tools for certifiable, auditable development of high-assurance systems in Haskell. In: High Confidence Software and Systems Conference. National Security Agency (April 2003)

    Google Scholar 

  116. Reynolds, J.C.: Towards a theory of type structure. In: Robinet, B. (ed.) Programming Symposium. LNCS, vol. 19, pp. 408–425. Springer, Heidelberg (1974)

    Chapter  Google Scholar 

  117. Reynolds, J.C.: Types, abstraction and parametric polymorphism. In: Information Processing 1983, pp. 513–523. Elsevier, Amsterdam (1983)

    Google Scholar 

  118. Ruehr, F.: Analytical and Structural Polymorphism Expressed Using Patterns over Types. PhD thesis, University of Michigan (1992)

    Google Scholar 

  119. Tim Sheard. Generic programming in Ωmega. In: this volume (2006)

    Google Scholar 

  120. Siek, J., Lee, L.-Q., Lumsdaine, A.: The Boost Graph Library. Addison-Wesley, Reading (2002)

    Google Scholar 

  121. Siek, J., Lumsdaine, A.: Essential language support for generic programming. In: Programming Language Design and Implementation, pp. 73–84 (2005)

    Google Scholar 

  122. Skillicorn, D.B.: The Bird-Meertens Formalism as a parallel model. In: Kowalik, J.S., Grandinetti, L. (eds.) Software for Parallel Computation. NATO ASI Series F, vol. 106, Springer, Heidelberg (1993)

    Google Scholar 

  123. STOP project. International Summer School on Constructive Algorithmics, Hollum, Ameland (1989)

    Google Scholar 

  124. Strachey, C.: Fundamental concepts in programming languages. Higher-Order and Symbolic Computation. Lecture notes from Summer School in Computer Programming 13(1/2), 1–49 (2000)

    Google Scholar 

  125. Taha, W.: A gentle introduction to multi-stage programming. In: Lengauer, C., Batory, D., Consel, C., Odersky, M. (eds.) Domain-Specific Program Generation. LNCS, vol. 3016, pp. 30–50. Springer, Heidelberg (2004)

    Chapter  Google Scholar 

  126. Unruh, E.: Prime number computation. ANSI X3J16-94-0075/ISO WG21-462 (1994)

    Google Scholar 

  127. Uustalu, T., Vene, V.: Primitive (co)recursion and course-of-value (co)iteration. Informatica 10(1), 5–26 (1999)

    MathSciNet  MATH  Google Scholar 

  128. van Wijngaarden, A., Mailloux, B.J., Peck, J.E.L., Koster, C.H.A., Sintzoff, M., Lindsey, C.H., Meertens, L.G.L.T., Fisker, R.G.: Revised report on the algorithmic language ALGOL 68. Acta Informatica 5(1-3) (1975)

    Google Scholar 

  129. Veldhuizen, T.: Active Libraries and Universal Languages. PhD thesis, Computer Science, Indiana University (2004)

    Google Scholar 

  130. Vene, V., Uustalu, T.: Functional programming with apomorphisms (corecursion). Proceedings of the Estonian Academy of Sciences: Physics, Mathematics. In: 9th Nordic Workshop on Programming Theory 47(3), 147–161 (1998)

    MathSciNet  MATH  Google Scholar 

  131. Vytiniotis, D., Washburn, G., Weirich, S.: An open and shut typecase. In: International Conference on Functional Programming (2004)

    Google Scholar 

  132. Wadler, P.: Theorems for free! In Functional Programming Languages and Computer Architecture, pp. 347–359. ACM, New York (1989)

    Google Scholar 

  133. Wadler, P.: Deforestation: Transforming programs to eliminate trees. Theoretical Computer Science 73, 231–248 (1990)

    Article  MathSciNet  MATH  Google Scholar 

  134. Wadler, P.: Comprehending monads. Mathematical Structures in Computer Science 2(4), 461–493 (1992)

    Article  MathSciNet  MATH  Google Scholar 

  135. Wadler, P.: Monads for functional programming. In: Broy, M. (ed.) Program Design Calculi: Proceedings of the Marktoberdorf Summer School. Also in [76] (1992)

    Google Scholar 

  136. Wadler, P.: How to solve the reuse problem? Functional programming. In: International Conference on Software Reuse, pp. 371–372. IEEE, Los Alamitos (1998), http://doi.ieeecomputersociety.org /10.1109/ICSR.1998.685772

    Google Scholar 

  137. Wadler, P.L.: The expression problem. Posting to java-genericity mailing list (November 12, 1998)

    Google Scholar 

  138. Wirth, N., Hoare, C.A.R.: A contribution to the development of ALGOL. Communications of the ACM 9(6), 413–432 (1966)

    Article  MATH  Google Scholar 

Download references

Author information

Authors and Affiliations

Authors

Editor information

Roland Backhouse Jeremy Gibbons Ralf Hinze Johan Jeuring

Rights and permissions

Reprints and permissions

Copyright information

© 2007 Springer-Verlag Berlin Heidelberg

About this paper

Cite this paper

Gibbons, J. (2007). Datatype-Generic Programming. In: Backhouse, R., Gibbons, J., Hinze, R., Jeuring, J. (eds) Datatype-Generic Programming. SSDGP 2006. Lecture Notes in Computer Science, vol 4719. Springer, Berlin, Heidelberg. https://doi.org/10.1007/978-3-540-76786-2_1

Download citation

  • DOI: https://doi.org/10.1007/978-3-540-76786-2_1

  • Publisher Name: Springer, Berlin, Heidelberg

  • Print ISBN: 978-3-540-76785-5

  • Online ISBN: 978-3-540-76786-2

  • eBook Packages: Computer ScienceComputer Science (R0)

Publish with us

Policies and ethics