Generic Programming

  • Roland Backhouse
  • Patrik Jansson
  • Johan Jeuring
  • Lambert Meertens
Part of the Lecture Notes in Computer Science book series (LNCS, volume 1608)


The development of science proceeds in a cycle of activities, the so-called abstraction-specialisation cycle. Abstraction is the process of seeking patterns or commonalities, which are then classified, often in a formal mathematical framework. In the process of abstraction, we gain greater understanding by eliminating irrelevant detail in order to identify what is essential. The result is a collection of general laws which are then put to use in the second phase of the cycle, the specialisation phase. In the specialisation phase the general laws are instantiated to specific cases which, if the abstraction is a good one, leads to novel applications, yet greater understanding, and input for another round of abstraction followed by specialisation.


Type Functor Generic Programming Fusion Rule Computation Rule Pattern Functor 
These keywords were added by machine and not by the authors. This process is experimental and the keywords may be updated as the learning algorithm improves.


Unable to display preview. Download preview PDF.

Unable to display preview. Download preview PDF.


  1. 1.
    Aarts, C.J., Backhouse, R.C., Hoogendijk, P., Voermans, T.S., van der Woude, J.: A relational theory of datatypes (September 1992), Available via World-Wide Web at
  2. 2.
    Cayenne, L.A.: A language with dependent types. In: Swierstra, S.D., Oliveira, J.N. (eds.) AFP 1998. LNCS, vol. 1608, pp. 28–115. Springer, Heidelberg (1999)CrossRefGoogle Scholar
  3. 3.
    Backhouse, R.C., Bijsterveld, M., van Geldrop, R., van der Woude, J.C.S.P.: Category theory as coherently constructive lattice theory. Department of Mathematics and Computing Science, Eindhoven University of Technology, 146 pages (1995), Working document. Available via World-Wide Web at at, Last revision (March 1997)
  4. 4.
    Backhouse, R.C., de Bruin, P., Hoogendijk, P., Malcolm, G., Voermans, T.S., van der Woude, J.: Polynomial relators. In: Nivat, M., Rattray, C.S., Rus, T., Scollo, G. (eds.) Proceedings of the 2nd Conference on Algebraic Methodology and Software Technology, AMAST 1991, pp. 303–326. Springer, Heidelberg (1992) (Workshops in Computing)Google Scholar
  5. 5.
    Backhouse, R.C., de Bruin, P., Malcolm, G., Voermans, T.S., van der Woude, J.: Relational catamorphisms. In: Möller, B. (ed.) Proceedings of the IFIP TC2/WG2.1 Working Conference on Constructing Programs from Specifications, pp. 287–318. Elsevier Science Publishers B.V, Amsterdam (1991)Google Scholar
  6. 6.
    Backhouse, R.C., Carré, B.A.: Regular algebra applied to path-finding problems. Journal of the Institute of Mathematics and its Applications 15, 161–186 (1975)zbMATHCrossRefMathSciNetGoogle Scholar
  7. 7.
    Backhouse, R.: Fixed point calculus applied to generic programming: Part 1. In: Esik, Z. (ed.) Proceedings, Workshop on Fixed Points in Computer Science (August 1998)Google Scholar
  8. 8.
    Backhouse, R.C., van den Eijnde, J.P.H.W., van Gasteren, A.J.M.: Calculating path algorithms. Science of Computer Programming 22(1-2), 3–19 (1994)zbMATHCrossRefMathSciNetGoogle Scholar
  9. 9.
    Bellè, G., Jay, C.B., Moggi, E.: Functorial ML. In: Kuchen, H., Swierstra, S.D. (eds.) PLILP 1996. LNCS, vol. 1140, Springer, Heidelberg (1996)Google Scholar
  10. 10.
    Bird, R., de Moor, O., Hoogendijk, P.: Generic functional programming with types and relations. J. of Functional Programming 6(1), 1–28 (1996)zbMATHCrossRefGoogle Scholar
  11. 11.
    Bird, R.S., de Moor, O.: Algebra of Programming. Prentice-Hall International, Englewood Cliffs (1996)Google Scholar
  12. 12.
    Bird, R.S.: An introduction to the theory of lists. In: Broy, M. (ed.) Logic of Programming and Calculi of Discrete Design. NATO ASI Series, vol. F36. Springer, Heidelberg (1987)Google Scholar
  13. 13.
    Cockett, R., Fukushima, T.: About Charity. Yellow Series Report No. 92/480/18, Dep. of Computer Science, Univ. of Calgary (1992)Google Scholar
  14. 14.
    Doornbos, H.: Reductivity arguments and program construction. PhD thesis, Eindhoven University of Technology, Department of Mathematics and Computing Science (June 1996)Google Scholar
  15. 15.
    Doornbos, H., Backhouse, R.: Induction and recursion on datatypes. In: Möller, B. (ed.) MPC 1995. LNCS, vol. 947, pp. 242–256. Springer, Heidelberg (1995)Google Scholar
  16. 16.
    Doornbos, H., Backhouse, R.: Reductivity. Science of Computer Programming 26(1-3), 217–236 (1996)zbMATHCrossRefMathSciNetGoogle Scholar
  17. 17.
    Floyd, R.W.: Algorithm 97. Shortest Path. Comm. ACM 5(6), 345 (1962)CrossRefGoogle Scholar
  18. 18.
    Fokkinga, M.M.: Law and Order in Algorithmics. PhD thesis, Universiteit Twente, The Netherlands (1992)Google Scholar
  19. 19.
    Fokkinga, M.M.: Datatype laws without signatures. Mathematical Structures in Computer Science 6, 1–32 (1996)zbMATHCrossRefMathSciNetGoogle Scholar
  20. 20.
    Fokkinga, M.M.: Monadic maps and folds for arbitrary datatypes. Memoranda Informatica 94-28, University of Twente (June 1994)Google Scholar
  21. 21.
    Gamma, E., Helm, R., Johnson, R., Vlissides, J.: Design Patterns – Elements of Reusable Object-Oriented Software. Addison-Wesley, Reading (1995)Google Scholar
  22. 22.
    Hoogendijk, P.: A Generic Theory of Datatypes. PhD thesis, Department of Mathematics and Computing Science, Eindhoven University of Technology (1997)Google Scholar
  23. 23.
    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)CrossRefGoogle Scholar
  24. 24.
    Hoogendijk, P., de Moor, O.: What is a datatype? Technical Report 96/16, Department of Mathematics and Computing Science, Eindhoven University of Technology (1996), Submitted to Science of Computer Programming. Available via World-Wide Web, at
  25. 25.
    Jansson, P., Jeuring, J.: PolyP - a polytypic programming language extension. In: POPL 1997: The 24th ACM SIGPLAN-SIGACT Symposium on Principles of Programming Languages, pp. 470–482. ACM Press, New York (1997)CrossRefGoogle Scholar
  26. 26.
    Jansson, P., Jeuring, J.: Functional pearl: Polytypic unification. Journal of Functional Programming (1998) (in press)Google Scholar
  27. 27.
    Jansson, P.: Functional polytypic programming – use and implementation. Technical report, Chalmers Univ. of Tech., Sweden (1997), Lic. thesis, Available from
  28. 28.
    Jay, C.B.: A semantics for shape. Science of Computer Programming 25, 251–283 (1995)zbMATHCrossRefMathSciNetGoogle Scholar
  29. 29.
    Jay, C.B., Bellè, G., Moggi, E.: Functorial ML. Extended version of [9] in press for Journal of Functional Programming 1998 (1998)Google Scholar
  30. 30.
    Jay, C.B., Cockett, J.R.B.: Shapely types and shape polymorphism. In: Sannella, D. (ed.) ESOP 1994. LNCS, vol. 788, pp. 302–316. Springer, Heidelberg (1994)Google Scholar
  31. 31.
    Jeuring, J.: Polytypic pattern matching. In: Conference Record of FPCA 1995, SIGPLAN-SIGARCH-WG2.8 Conference on Functional Programming Languages and Computer Architecture, pp. 238–248 (1995)Google Scholar
  32. 32.
    Jeuring, J., Jansson, P.: Polytypic programming. In: Launchbury, J., Sheard, T., Meijer, E. (eds.) AFP 1996. LNCS, vol. 1129, pp. 68–114. Springer, Heidelberg (1996)Google Scholar
  33. 33.
    Malcolm, G.: Algebraic data types and program transformation. PhD thesis, Groningen University (1990)Google Scholar
  34. 34.
    Malcolm, G.: Data structures and program transformation. Science of Computer Programming 14(2/3), 255–280 (1990)zbMATHCrossRefMathSciNetGoogle Scholar
  35. 35.
    Meertens, L.: Algorithmics – towards programming as a mathematical activity. In: Proceedings of the CWI Symposium on Mathematics and Computer Science, pp. 289–334. North-Holland, Amsterdam (1986)Google Scholar
  36. 36.
    Meertens, L.: Paramorphisms. Formal Aspects of Computing 4(5), 413–424 (1992)zbMATHCrossRefGoogle Scholar
  37. 37.
    Meertens, L.: Calculate polytypically! In: Kuchen, H., Swierstra, S.D. (eds.) PLILP 1996. LNCS, vol. 1140, pp. 1–16. Springer, Heidelberg (1996)Google Scholar
  38. 38.
    de Moor, O., Sittampalam, G.: Generic program transformation. In: Swierstra, S.D., Oliveira, J.N. (eds.) AFP 1998. LNCS, vol. 1608, pp. 28–115. Springer, Heidelberg (1999)CrossRefGoogle Scholar
  39. 39.
    Pardo, A.: Monadic corecursion – definition, fusion laws, and applications. Electronic Notes in Theoretical Computer Science, vol. 11 (1998)Google Scholar
  40. 40.
    Reynolds, J.C.: Types, abstraction and parametric polymorphism. In: Mason, R.E. (ed.) IFIP 1983, pp. 513–523. Elsevier Science Publishers, Amsterdam (1983)Google Scholar
  41. 41.
    Riguet, J.: Relations binaires, fermetures, correspondances de Galois. Bulletin de la Société Mathématique de France 76, 114–155 (1948)zbMATHMathSciNetGoogle Scholar
  42. 42.
    Roy, B.: Transitivité et connexité. C.R. Acad. Sci. 249, 216 (1959)zbMATHGoogle Scholar
  43. 43.
    Ruehr, F.: Analytical and Structural Polymorphism Expressed Using Patterns Over Types. PhD thesis, University of Michigan (1992)Google Scholar
  44. 44.
    Sheard, T.: Automatic generation and use of abstract structure operators. ACM TOPLAS 13(4), 531–557 (1991)CrossRefGoogle Scholar
  45. 45.
    Wadler, P.: Theorems for free! In: 4th Symposium on Functional Programming Languages and Computer Architecture. ACM, London (1989)Google Scholar
  46. 46.
    Warshall, S.: A theorem on boolean matrices. J. ACM 9, 11–12 (1962)zbMATHCrossRefMathSciNetGoogle Scholar

Copyright information

© Springer-Verlag Berlin Heidelberg 1999

Authors and Affiliations

  • Roland Backhouse
    • 1
  • Patrik Jansson
    • 2
  • Johan Jeuring
    • 3
  • Lambert Meertens
    • 4
  1. 1.Department of Mathematics and Computing ScienceEindhoven University of TechnologyEindhovenThe Netherlands
  2. 2.Department of Computing ScienceChalmers University of TechnologyGöteborgSweden
  3. 3.Department of Computer ScienceUtrecht UniversityUtrechtThe Netherlands
  4. 4.CWI & Utrecht UniversityUtrechtThe Netherlands

Personalised recommendations