Course Web Pages
Research and Technical Staff
CS Talks Mailing List
Yale Computer Science FAQ
Yale Workstation Support
AfterCollege Job Resource
Graduate Writing Center
Life in the Department
Life About Town
Yale Applied Mathematics
Yale C2: Creative Consilience of
Computing and the Arts
Yale Faculty of Engineering
Yale GSAS Staff Directory
Yale University Home Page
Yale Info Phonebook
Why is computer hardware so much more reliable than computer software? One reason is that there is much less formality and rigor in software development. Prof. Hudak addresses this problem through the design, analysis, implementation, and application of modern, higher-order, typed programming languages such as Haskell. Programs can be written in such languages more quickly, succinctly, and with specification-like quality. The use of a static type system eliminates many common programming errors and guarantees run-time type safety. It is also easier to reason about such programs; proofs of correctness can be developed for non-trivial properties of complex programs.
Another reason for the unreliable nature of software is the ease with which we can change it! This "advantage" often destroys previously well-designed properties, and introduces bugs that are not immediately obvious. Thus, Prof. Hudak studies the use of advanced abstraction techniques that anticipate change in software structure. Higher-order techniques, whether for functions, types, or modules, are at the core of this technology. Continuations, monads and their transformers exploit abstract algebraic properties of programs. But the ultimate abstraction of an application is a domain specific language (DSL). Prof. Hudak has recently been involved in the design of DSLs for graphics, animation, robotics, computer vision, autonomous control, and computer music.
Most recently, Prof. Hudak and his colleagues have developed a DSL called Yampa, a refinement of previous work on FRP (Functional Reactive Programming), which has notions of both continuous values and discrete events. This novel language is ideal for programming hybrid systems such as found in robotics and other control applications. Many interesting theoretical and practical issues arise in its design and implementation. For example, how does one define a denotational or operational semantics for a language with continuous values? An implementation must approximate continuous values, but then in what sense is it faithful to the semantics? How does one express transformations in time and in space? And how can such languages be used to program real-time embedded systems, where guarantees on execution time and space are critical to proper performance?
Prof. Hudak was one of the principal organizers of the "Haskell
Committee," an international group of computer scientists who designed
Haskell. He is co-Editor-in-Chief for the Journal of Functional Programming,
Editor for the Journal of Higher-Order and Symbolic Logic, and charter
member of IFIP Working Group 2.8 on Functional Programming. He is a recipient
of an NSF Presidential Young Investigator Award and an IBM Faculty Development
Award, and in 2004 was elected as a Fellow of the ACM. Prof. Hudak was
also Chairman of the Department of Computer Science at Yale from 1999
The Haskell School of Expression: Learning Functional Programming through Multimedia, Cambridge University Press, New York, 2000.
Robots, Arrows, and Functional Reactive Programming, with Antony Courtney, Henrik Nilsson, and John Peterson, in Summer School on Advanced Functional Programming, Springer Verlag, LNCS 2638, 2003.
Polymorphic Temporal Media, in Proceedings of 6th International Workshop on Practical Aspects of Declarative Languages, Springer Verlag LNCS, June 2004.
Describing and Interpreting Music in Haskell, in the Fun of Programming, Chapter 4, ed. by Jeremy Gibbons and Oege de Moor, Palgrave, 2003.
"A Language for Declarative Robotic Programming, with J. Peterson and G. Hager, International Conference on Robotics and Automation, 1999.