Arrows, Robots, and Functional Reactive Programming


Paul Hudak, Henrik Nilsson, Antony Courtney, John Peterson


Functional reactive programming, or FRP, is a paradigm for programming hybrid systems -- i.e., systems containing a combination of both continuous and discrete components -- in a high-level, declarative way. The key ideas in FRP are its notions of continuous, time-varying values, and time-ordered sequences of discrete events.

Yampa is an instantiation of FRP as a domain-specific language embedded in Haskell. This paper describes Yampa in detail, and shows how it can be used to program a particular kind of hybrid system: a mobile robot. Because performance is critical in robotic programming, Yampa uses arrows (a generalization of monads) to create a disciplined style of programming with time-varying values that helps ensure that common kinds of time- and space-leaks do not occur.

No previous experience with robots is expected of the reader, although a basic understanding of physics and calculus is assumed. No knowledge of arrows is required either, although we assume a good working knowledge of Haskell.

This paper is dedicated in memory of Edsger W. Dijkstra for his influential insight that mathematical logic is and must be the basis for sensible computer program construction.


author = "Paul Hudak and Antony Courtney and Henrik Nilsson and John Peterson",  
title = "Arrows, Robots, and Functional Reactive Programming",
booktitle = "Summer School on Advanced Functional Programming 2002, Oxford University",
year = 2003,
volume = 2638,
series = "Lecture Notes in Computer Science",
pages = "159--187",
publisher = "Springer-Verlag"}