My research has always centered around notions of language; typically these
languages have been programming languages, but they also include, for
example, formal logics and document-description languages. Because of the
computational context of my work, my concerns have focused on the tension
between expressive power and tractability. Generally speaking, as a language
becomes more expressive, it also becomes more difficult to analyze and more
capable of "going awry". Static type systems are a good example of striking
a balance between these concerns: the type system constrains the expressive
capability of the language, but in return gives us certain guarantees about
the behavior of well-typed programs.
Most of my research has its origins in practical considerations. For
example, my dissertation work on polymorphic type systems arose out of
programming experiences with ML and related languages: in everyday use, I
found that I was unable to express functions in these languages which I
intuitively felt were reasonable and well-behaved. I was ultimately able to
justify these intuitions by demonstrating extended language features and
type systems which could accommodate the new functions. As another example,
my work on HtX, Oberlin's language for Web-document description, arose out
of very pragmatic issues in the maintenance of large, complex document
structures. In each of these cases, I have tried to find ways to bring
theoretical results to bear on practical, real-world problems faced by
language users.
Functional Programming