Jeremy Gibbons is Professor of Computing at the University of Oxford, where he teaches on the part-time professional Master’s programme in Software Engineering, and leads the Algebra of Programming research group. He is co-Editor-in-Chief of the Journal of Functional Programming, and former Chair of IFIP Working Group 2.1 on Algorithmic Languages and Calculi (which designed Algol68) and former Vice Chair of ACM SIGPLAN (which runs ICFP). His recent book “Algorithm Design with Haskell" with Richard Bird has just been published by Cambridge University Press.
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 to be processed. 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. I argue that programmers should consider the structure of output data, leading them also towards structurally corecursive programs.