Personal tools

Old-reactive

From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
(new library (in progress))
 
(Abstract: added purely functional aspect, in contrast with DataDriven)
Line 6: Line 6:
 
== Abstract ==
 
== Abstract ==
   
'''Reactive''' is a simple foundation for programming reactive systems functionally. Like Fran/FRP, it has a notions of (reactive) behaviors and events. Like [[DataDriven]], Reactive has a data-driven implementation. The main difference between Reactive and DataDriven is that Reactive builds on STM-based IVars, while DataDriven builds on continuation-based computations.
+
'''Reactive''' is a simple foundation for programming reactive systems functionally. Like Fran/FRP, it has a notions of (reactive) behaviors and events. Like [[DataDriven]], Reactive has a data-driven implementation. The main difference between Reactive and DataDriven are
  +
* Reactive builds on STM-based IVars, while DataDriven builds on continuation-based computations; and
  +
* The algebra of Events and reactive values (called "sources" in DataDriven) are ''purely'' functional. I couldn't figure out how to accomplish that in DataDriven.
   
 
The inspiration for Reactive was Mike Sperber's [[http://www-pu.informatik.uni-tuebingen.de/lula/deutsch/publications.html Lula]] implementation of FRP. Mike used blocking threads, which I had never considered for FRP. While playing with the idea, I realized that I could give a very elegant and efficient solution to caching, which DataDriven doesn't do. (For an application <hask>f <*> a</hask> of a varying function to a varying argument, caching remembers the latest function to apply to a new argument and the last argument to which to apply a new function.)
 
The inspiration for Reactive was Mike Sperber's [[http://www-pu.informatik.uni-tuebingen.de/lula/deutsch/publications.html Lula]] implementation of FRP. Mike used blocking threads, which I had never considered for FRP. While playing with the idea, I realized that I could give a very elegant and efficient solution to caching, which DataDriven doesn't do. (For an application <hask>f <*> a</hask> of a varying function to a varying argument, caching remembers the latest function to apply to a new argument and the last argument to which to apply a new function.)

Revision as of 06:10, 10 December 2007


Contents

1 Abstract

Reactive is a simple foundation for programming reactive systems functionally. Like Fran/FRP, it has a notions of (reactive) behaviors and events. Like DataDriven, Reactive has a data-driven implementation. The main difference between Reactive and DataDriven are

  • Reactive builds on STM-based IVars, while DataDriven builds on continuation-based computations; and
  • The algebra of Events and reactive values (called "sources" in DataDriven) are purely functional. I couldn't figure out how to accomplish that in DataDriven.
The inspiration for Reactive was Mike Sperber's [Lula] implementation of FRP. Mike used blocking threads, which I had never considered for FRP. While playing with the idea, I realized that I could give a very elegant and efficient solution to caching, which DataDriven doesn't do. (For an application
f <*> a
of a varying function to a varying argument, caching remembers the latest function to apply to a new argument and the last argument to which to apply a new function.)

As with DataDriven, Reactive provides instances for Monoid, Functor, Applicative, and Monad.

Besides this wiki page, here are more ways to find out about Reactive:

Please leave comments at the Talk page.

2 IVars

3 Events and reactive values

4 Constant-optimized functions