<color><param>FFFF,0000,0000</param><bigger>AFP3 Proceedings </bigger></color>You may not have noticed, but Springer has published the proceedings of the AFP3: <color><param>FFFF,0000,0000</param>@book{AFP3, author = {Doaitse Swierstra and Pedro Henriques and Jos\'{e} Oliveira}, title = {Advanced Functional Programming, Third International School, AFP'98}, publisher = {Springer}, year = {1999}, isbn = {9 783540 662419}, series = {LNCS}, number = {1608} } </color>I quote from the preface: In this volume you will find the lecture notes corresponding to the presentations given at the 3rd summer school on Advanced Functional Programming, held in Braga, Portugal from September 12--19, 1998. This school was preceded by earlier instances in Bastad (1995, Sweden, LNCS 925) and Portland (1996, USA, LNCS 1110). The goal of this series of schools is to bring recent developments in the area of functional programming to a large group of students. The notes are published in order to enable individuals, small study groups, and lecturers to become acquainted with recent work in the fast developing area of functional programming. What makes this instance of the school particularly interesting is that all lectures introduced useful software, that was used by the students in the classes to get hands-on experience with the subjects taught. We urge readers of this volume to download the latest version of this software from the Internet and try to do the exercises from the text themselves; the proof of the program is in the typing. The first lecture, on <color><param>FFFF,0000,0000</param>Sorting Morphisms</color>, serves as a gentle introduction to the things to come. If you have always been afraid of the word ``morphism'', and you have been wondering what catamorphisms, anamorphisms, hylomorphims and paramorphims were about, this is the paper to read first; you will discover that they are merely names for recursion patterns that occur over and over again when writing functional programs. The algorithms in the paper are all about sorting, and since you are likely to know those algorithms by heart already, seeing them structured and analyzed in a novel way should serve as a motivation to read on with the second lecture. The second lecture, on <color><param>FFFF,0000,0000</param>Generic Programming</color>, is almost a book in a book. The notes can be seen as the culminating point of the STOP-project, that was sponsored by the Dutch government at the end of the 80's and the beginning of the 90's; its overall goal was the development of a calculational way of deriving programs. The project has provided deeper insight into real functional programming and into the theory behind many things commonly written by functional programmers. One of the main achievements of the project has been to make people aware of the fact that many algorithms can be described in a data-independent way. The PolyP system introduced in these notes is one of the translations to the Haskell-world of this theoretical underpinning. The third lecture, on <color><param>FFFF,0000,0000</param>Generic Program Transformation</color>, can also be seen as an application of the theory introduced in lecture two. Many efficiency-improving program transformations can be performed in a mechanical way, and these would not have been possible without insight into the correctness of such transformations gained in the lecture on Generic Programming. The fourth lecture, on <color><param>FFFF,0000,0000</param>Designing and Implementing Combinator Languages</color>, introduces an easy to write formalism for writing down the catamorphisms introduced in earlier chapters. It is shown how quite complicated catamorphisms, that at first sight seem rather forbidding by making extensive use of higher order domains, can actually be developed in a step-wise fashion, using an attribute grammar view; it is furthermore shown how to relate this way of programming with concepts from the object-oriented world thus making clear what the strengths and weaknesses of each world are. The fifth lecture, titled <color><param>FFFF,0000,0000</param>Using MetaML: a Staged Programming Language</color>, introduces the concept of partial evaluation; it serves as another instance of the quest for ``the most generic of writing programs without having to pay too much''. The staging techniques show how costs that were introduced by adding extra levels of abstraction, may be moved from run-time to compile-time. It has been common knowledge to users of modern functional languages that the type system can be a great help in shortening programs and reducing errors. In the extreme one might see a type as a predicate capturing the properties of any expression with that type. In the sixth lecture on <color><param>FFFF,0000,0000</param>Cayenne -- Spice up your Programming with Dependent Types</color> it is shown in what direction functional languages are most likely to develop, and what may be expected of the new type systems to be introduced. The last lecture, titled <color><param>FFFF,0000,0000</param>Haskell as an Automation Controller</color>, shows that writing functional programs does not have to imply that one is bound to remain isolated from the rest of the world. Being able to communicate with software written by others in a uniform way, is probably one of the most interesting new developments in current computer science. It appears that the concept of a monad together with the Haskell typing rules, are quite adequate to describe the interface between Haskell programs and the outer world. Doaitse Swierstra, Utrecht Pedro Henriques, Minho Jos\'{e} Oliveira, Minho Doaitse Swierstra mailto:[EMAIL PROTECTED],[EMAIL PROTECTED] <smaller>__________________________________________________________________________ S. Doaitse Swierstra, Department of Computer Science, Utrecht University (Prof. Dr) P.O.Box 80.089, 3508 TB UTRECHT, the Netherlands Mail: mailto:[EMAIL PROTECTED] WWW: http://www.cs.uu.nl/ PGP Public Key: http://www.cs.uu.nl/people/doaitse/ tel: +31 (30) 253 3962, fax: +31 (30) 2513791 __________________________________________________________________________ </smaller>