<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>