Biographical Sketch
Immediately before coming to Rutgers, I was an Assistant Professor in the Mathematics and Computer Science Department at Dickinson College in Carlisle, Pennsylvania. I taught computer science courses there. I came to Dickinson from Maine, where I was an Assistant Professor in the Mathematics Department at Bates College in Lewiston. There, I directed Bates' computer science program, taught computer science (and, occasionally, mathematics) courses, and pursued research in programming languages. Before that, I was a Research Associate at the Pacific Software Research Center (PacSoft) of the Department of Computer Science and Engineering at the Oregon Graduate Institute of Science and Technology (OGI). There I worked with John Launchbury and Jeff Lewis to implement and study properties of automatable transformation-based methods --- such as short cut fusion --- for improving the efficiency of functional programs. I also finished writing the book Deduction Systems, co-authored with Rolf Socher-Ambrosius.
Prior to joining PacSoft, I was an Assistant Professor in the Department of Mathematics and Computer Science at Hobart and William Smith Colleges (HWS). At HWS I taught both mathematics and computer science courses --- integral and differential calculus, Pascal programming, discrete math, real analysis, topology, automata theory, and algorithmic graph theory, to name a few --- and directed an independent study in equational unification. I also researched lambda calculus- and combinatory logic-based order-sorted higher-order unification algorithms and methods for solving simplification ordering constraints, although this was mostly done during a sixteen-month leave I spent with AG Siekmann at the Universitaet des Saarlandes in Saarbruecken, Germany. These research projects naturally out of my dissertation work --- directed by Dan Dougherty at Wesleyan University --- on equational and higher-order equational unification. I now find it strange to recall that when I started graduate school I wanted to become an algebraist. But that was before I had encountered theoretical computer science, Church's amazing lambda calculus, or Curry's computationally equivalent combinatory logic.
Practical and theoretical aspects of short cut fusion and similar program transformations remain the focus of my research. I am currently investigating the effectiveness of these fusion techniques in practice with Franklyn Turbak in the Lumberjack Project, and have been working with Eelco Visser to adapt them to the strategy language Stratego. I am also interested in the role parametricity plays in proving the correctness of short cut fusion and other "free theorems" for various calculi approximating modern functional languages. Most of my recent work --- including some carried out during a sabbatical in the Foundations of Programming group at the University of Nottingham, and some other research done together with Janis Voigtlaender --- has been concerned with this issue. More recent research has focused on developing what I call initial algebra packages for advanced data types, such as arbitrary inductive types, nested types, and GADTs. An initial algebra package for a data type comprises an initial algebra semantics for it, together with the following immediately derivable tools for structured programming with data of that type: a fold, a Church encoding, a build, and a fold/build fusion rule. This work has mostly been conducted with Neil Ghani, but has also involved Tarmo Uustalu and Varmo Vene.