###
Polytypic SPAM

by Patrik Jansson
Many functions have to be written over and over again for different
datatypes, either because datatypes change during the development of
programs, or because functions with similar functionality are needed on
different datatypes. Examples of such functions are pretty printers,
pattern matchers, equality functions, unifiers, rewriting functions, etc.
Such functions are called polytypic functions.

A polytypic function is a function that is defined by induction on the
structure of user-defined datatypes. This talk introduces polytypic
functions, shows how to construct and reason about polytypic functions and
says a few words about the implementation of the polytypic programming
system PolyP.

PolyP extends a functional language (a subset of Haskell) with a
construct for writing polytypic functions. The extended language type
checks definitions of polytypic functions, and infers the types of all
other expressions. Programs in the extended language are translated to
Haskell.