This paper presents a type-inference system for Scheme that is designe
d to be used by students in an introductory programming course. The ma
jor goal of the work is to present a type system that is simple enough
to be used by beginner students, yet is powerful enough to express th
e ideas of polymorphism, abstract data types (ADTs), and higher-order
procedures. The system also performs some rudimentary syntax checking.
The system uses subtyping, but only in a primitive fashion. It has a
type datum which is a supertype of all types, and a type poof which is
a subtype of all types. It uses intersection types to control the use
of datum and to generate simple but accurate types. (C) 1997 Elsevier
Science Ltd.