Functional reactive programming
Functional reactive programming (FRP) is a programming paradigm for reactive programming using the building blocks of functional programming. FRP has been used for programming GUIs, robotics, and music, aiming to simplify these problems by explicitly modeling time.
Formulations of FRP
Formulations such as Event-Driven FRP and Elm require that updates are discrete and event-driven. These formulations have pushed for practical FRP, focusing on a semantics that have a simple API that can be implemented efficiently in a setting such as robotics or in a web-browser.
In these formulations, it is common that the ideas of behaviors and events have are combined into signals that always have a current value, but change discretely.
The earliest formulation of FRP used a continuous semantics, aiming to abstract over many operational details that are not important to the meaning of a program. The key properties of this formulation are:
- Modeling values that vary over continuous time, called "behaviors" and later "signals".
- Modeling "events" which have occurrences at finitely many points in time.
- The system can be changed in response to events, generally termed "switching."
- The separation of evaluation details such as sampling rate from the reactive model.
This semantic model of FRP in side-effect free languages is typically in terms of continuous functions, and typically over time.
- Tao Presentations, FRP language for 3D interactive presentations
- Incremental computing
- Evan Czaplicki, Elm: Concurrent FRP for Functional GUIs, 2012 Harvard Thesis
- Henrik Nilsson, Antony Courtney, and John Peterson, Functional Reactive Programming, Continued, Haskell Workshop '02
- Walid Taha and Zhanyong Wan and Paul Hudak, Event-Driven FRP, PADL '02
- Evan Czaplicki and Stephen Chong, Asynchronous Functional Reactive Programming for GUIs, PLDI 2013
- Zhanyong Wan, Walid Taha, and Paul Hudak, Real-Time FRP, ICFP '01
- Conal Elliott and Paul Hudak, "Functional Reactive Animation", ICFP 1997
- Antony Courtney and Conal Elliott, Genuinely Functional User Interfaces, 2001 Haskell Workshop
- "What is Functional Reactive Programming?" An intro to FRP with live demos.
- Haskell-related FRP research
- RxJava, Netflix Java port of Rx
- Frappuccino, FRP implementation in Ruby.
- ReactiveCocoa, an Objective-C framework for FRP.
- "Deprecating the Observer Pattern with Scala⋅React," Scala.React, an FRP Scala implementation
- Sodium, reactive programming in Java, Haskell and C++