Personal tools

Reactive-banana

From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
(Status)
(Status)
 
(21 intermediate revisions by 4 users not shown)
Line 3: Line 3:
 
<div style="float:left;">
 
<div style="float:left;">
 
[[Image:Reactive-Banana-banana.png|Reactive banana displaying trigger-happy <code>Behavior</code>.]]</div>
 
[[Image:Reactive-Banana-banana.png|Reactive banana displaying trigger-happy <code>Behavior</code>.]]</div>
''Reactive-banana'' is a practical library for [[Functional Reactive Programming]] (FRP).
+
''Reactive-banana'' is a library for [[Functional Reactive Programming]] (FRP).
  
Support the project with a small donation: [http://flattr.com/thing/384682/reactive-banana http://api.flattr.com/button/flattr-badge-large.png]
+
FRP offers an elegant and concise way to express interactive programs such as [http://hackage.haskell.org/package/reactive-banana-wx graphical] [https://wiki.haskell.org/Threepenny-gui user] interfaces, animations, [[Reactive-balsa|computer music]] or robot controllers. In particular, it promises to avoid the spaghetti code that is all too common in traditional approaches to GUI programming.
 
+
FRP offers an elegant and concise way to express interactive programs such as graphical user interfaces, animations, [[Reactive-balsa|computer music]] or robot controllers. It promises to avoid the spaghetti code that is all too common in traditional approaches to GUI programming.
+
  
 
The goal of the library is to provide a solid foundation.
 
The goal of the library is to provide a solid foundation.
* Writing '''graphical user interfaces''' with FRP is made easy. The library can be hooked into ''any'' existing event-based framework like [[wxHaskell]] or [[Gtk2Hs]]. A plethora of [[#documentation|example code]] helps with getting started. You can mix FRP and imperative style. If you don't know how to express functionality in terms of FRP, just temporarily switch back to the imperative style.
+
* Programmers interested implementing FRP will have a '''reference''' for a '''simple semantics''' with a working implementation. The library stays close to the semantics pioneered by Conal Elliott.
* Programmers interested in the implementation of FRP will have a '''reference''' for a '''simple semantics''' with a working implementation. The library stays close to the semantics pioneered by Conal Elliott.
+
 
* The library features an '''efficient implementation'''. No more spooky time leaks, predicting space & time usage should be straightforward.
 
* The library features an '''efficient implementation'''. No more spooky time leaks, predicting space & time usage should be straightforward.
 +
* A plethora of '''[[#documentation|example code]]''' helps with getting started.
 +
 +
The library is meant to be used in conjunction with existing libraries that are specific to your problem domain. For instance, you can hook it into ''any'' event-based GUI framework, like [[wxHaskell]] or [[Gtk2Hs]]. Several helper packages like {{HackagePackage|id=reactive-banana-wx}} provide a small amount of glue code that can make life easier.
  
 
[[#feedback|Feedback]] is welcome, I want to hear from you!
 
[[#feedback|Feedback]] is welcome, I want to hear from you!
Line 18: Line 18:
 
== Status ==
 
== Status ==
  
Current development focuses on dynamic event switching. Examples from game programming and computer music are planned.
+
Current development focuses on performance. Applications to GUI programming are explored in the sister project [[Threepenny-gui|threepenny-gui]].
  
 +
* 04 January 2016: reactive-banana 1.1.0.0 released.
 +
* 29 October 2015: reactive-banana 1.0.0.0 released. Milestone.
 +
* 27 August 2015: reactive-banana 0.9.0.0 released.
 +
* 29 January 2014: reactive-banana 0.8.0.0 released.
 +
<!--
 +
* 21 November 2013: reactive-threepenny-gui deprecated again, because [[Threepenny-gui|threepenny-gui]] now has its own FRP subsystem built-in.
 +
* 02 August 2013: Initial release of reactive-banana-threepenny. Binds to the threepenny-gui GUI library.
 
* 26 August 2012: reactive-banana 0.7.0.0 released. Features dynamic event switching.
 
* 26 August 2012: reactive-banana 0.7.0.0 released. Features dynamic event switching.
 
* 15 May 2012: reactive-banana 0.6.0.0 released.
 
* 15 May 2012: reactive-banana 0.6.0.0 released.
Line 28: Line 35:
 
* 22 June 2011: reactive-banana 0.3.0.0 released
 
* 22 June 2011: reactive-banana 0.3.0.0 released
 
* 28 April 2011: reactive-banana 0.2.0.0 released
 
* 28 April 2011: reactive-banana 0.2.0.0 released
 +
-->
  
 
== Fake Testimonials ==
 
== Fake Testimonials ==
Line 37: Line 45:
 
"When I need a <code>bullet</code> event, I can just trigger it." — ''Billy the Reactive Banana''
 
"When I need a <code>bullet</code> event, I can just trigger it." — ''Billy the Reactive Banana''
  
== Releases and Resources ==
+
"This should be in a museum!" — ''Banana Jones''
* Download on Hackage
+
 
** {{HackagePackage|id=reactive-banana}} - the FRP library itself
+
"Hey Mister! Why not use reactive-banana as a smartphone app to brush your teeth?" — ''Tommy "Banana" Johnson''
** {{HackagePackage|id=reactive-banana-wx}} - binding to the [[wxHaskell]] GUI library
+
 
 +
== Documentation ==
 
* <span id="documentation">Documentation</span>
 
* <span id="documentation">Documentation</span>
** [[FRP explanation using reactive-banana | Tutorial: Explanation of FRP using reactive-banana]]
+
** '''[https://github.com/HeinrichApfelmus/reactive-banana/blob/07f3e9bf44ec8c227442daef723f7e9682c5a342/reactive-banana/doc/tutorial-2012-07-en.pdf?raw=true Slides from a tutorial given by the library author (pdf)]'''
** [http://hackage.haskell.org/package/reactive-banana API reference]
+
** [[FRP explanation using reactive-banana | Unofficial tutorial on the Haskell wiki]]
 +
** '''[http://hackage.haskell.org/package/reactive-banana API reference]'''
 
** '''[[/Examples/]]'''
 
** '''[[/Examples/]]'''
 
** [http://apfelmus.nfshost.com/blog.html#functional-reactive-programming-frp Developer Blog]
 
** [http://apfelmus.nfshost.com/blog.html#functional-reactive-programming-frp Developer Blog]
 
* <span id="feedback">Feedback</span> and Contact
 
* <span id="feedback">Feedback</span> and Contact
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus] <apfelmus at quantentunnel de>
+
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus]
 
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/reactive-banana/issues?sort=created&direction=desc&state=open Issue Tracker!]
 
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/reactive-banana/issues?sort=created&direction=desc&state=open Issue Tracker!]
 
** Questions? [http://stackoverflow.com/questions/ask?tags=reactive-programming+haskell+frp+reactive-banana Ask on StackOverflow!]
 
** Questions? [http://stackoverflow.com/questions/ask?tags=reactive-programming+haskell+frp+reactive-banana Ask on StackOverflow!]
 +
** More questions? [mailto:apfelmus%20at%20quantentunnel%20de Email] or [https://hackhands.com/apfelmus live help]!
 +
 +
== Downloads and Source Code ==
 +
* Download and installation from Hackage
 +
** {{HackagePackage|id=reactive-banana}} - the FRP library itself
 +
** {{HackagePackage|id=reactive-banana-sdl}} - binding to the [[SDL]] library
 +
** {{HackagePackage|id=reactive-banana-wx}} - binding to the [[wxHaskell]] GUI library
 +
 
* Source code on github
 
* Source code on github
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/develop/reactive-banana reactive-banana] development branch
+
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/master/reactive-banana reactive-banana] master branch
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/develop/reactive-banana-wx reactive-banana-wx] development branch
+
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/master/reactive-banana-wx reactive-banana-wx] master branch
  
 
== External Links ==
 
== External Links ==
No external links yet.
+
* [https://github.com/bernstein/breakout breakout], a small game
  
  

Latest revision as of 21:05, 4 January 2016

Contents

[edit] 1 What is it?

Reactive banana displaying trigger-happy Behavior.

Reactive-banana is a library for Functional Reactive Programming (FRP).

FRP offers an elegant and concise way to express interactive programs such as graphical user interfaces, animations, computer music or robot controllers. In particular, it promises to avoid the spaghetti code that is all too common in traditional approaches to GUI programming.

The goal of the library is to provide a solid foundation.

  • Programmers interested implementing FRP will have a reference for a simple semantics with a working implementation. The library stays close to the semantics pioneered by Conal Elliott.
  • The library features an efficient implementation. No more spooky time leaks, predicting space & time usage should be straightforward.
  • A plethora of example code helps with getting started.

The library is meant to be used in conjunction with existing libraries that are specific to your problem domain. For instance, you can hook it into any event-based GUI framework, like wxHaskell or Gtk2Hs. Several helper packages like reactive-banana-wx provide a small amount of glue code that can make life easier.

Feedback is welcome, I want to hear from you!

[edit] 2 Status

Current development focuses on performance. Applications to GUI programming are explored in the sister project threepenny-gui.

  • 04 January 2016: reactive-banana 1.1.0.0 released.
  • 29 October 2015: reactive-banana 1.0.0.0 released. Milestone.
  • 27 August 2015: reactive-banana 0.9.0.0 released.
  • 29 January 2014: reactive-banana 0.8.0.0 released.

[edit] 3 Fake Testimonials

"In the programming-language world, one rule of survival is simple: dance or die. This library makes dancing easy." – Simon Banana Jones

"About the use of language: it is impossible to sharpen a pencil with a blunt axe. You should try reactive-banana instead." — Event Dijkstra

"When I need a bullet event, I can just trigger it." — Billy the Reactive Banana

"This should be in a museum!" — Banana Jones

"Hey Mister! Why not use reactive-banana as a smartphone app to brush your teeth?" — Tommy "Banana" Johnson

[edit] 4 Documentation

[edit] 5 Downloads and Source Code

[edit] 6 External Links