Personal tools

Reactive-banana

From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
(Releases and Resources: Add flattr button)
(Releases and Resources)
 
(34 intermediate revisions by 5 users not shown)
Line 1: Line 1:
 
== What is it? ==
 
== What is it? ==
   
''Reactive-banana'' is a small library for [[Functional Reactive Programming]] (FRP).
+
<div style="float:left;">
  +
[[Image:Reactive-Banana-banana.png|Reactive banana displaying trigger-happy <code>Behavior</code>.]]</div>
  +
''Reactive-banana'' is a library for [[Functional Reactive Programming]] (FRP).
   
The goal is to create a solid foundation for anything FRP-related.
+
Support the project with a small donation: [http://flattr.com/thing/384682/reactive-banana http://api.flattr.com/button/flattr-badge-large.png]
* Users can finally start experimenting with '''graphical user interfaces''' based on FRP since the library can be hooked into ''any'' existing event-based framework like [[wxHaskell]] or [[Gtk2Hs]], and will provide ample documentation.
+
* Programmers interested in implementing FRP will have a '''reference''' for a '''simple semantics''' with a working implementation.
+
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.
* It features an '''efficient implementation'''. No more spooky time leaks, predicting space & time usage should be straightforward.
+
  +
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 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.
   
 
[[#feedback|Feedback]] is welcome, I want to hear from you!
 
[[#feedback|Feedback]] is welcome, I want to hear from you!
Line 12: Line 12:
 
== Status ==
 
== Status ==
   
Current development focuses on providing tutorials, documentation and examples for the library. Furthermore, the author is writing an [https://github.com/HeinrichApfelmus/reactive-banana/tree/master/BlackBoard example application] to flesh out the FRP approach to GUI programming.
+
Current development focuses on performance. Applications to GUI programming are explored in the sister project [[Threepenny-gui|threepenny-gui]].
   
  +
* 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.
  +
* 15 May 2012: reactive-banana 0.6.0.0 released.
  +
* 25 March 2012: reactive-banana 0.5.0.0 released.
  +
* 24 October 2011: reactive-banana 0.4.3.0 released.
  +
* 26 September 2011: Added some more examples, reactive-banana 0.4.2.0 released.
 
* 14 July 2011: Implemented many examples, reactive-banana 0.4.1.0 released.
 
* 14 July 2011: Implemented many examples, reactive-banana 0.4.1.0 released.
 
* 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 ==
  +
  +
"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 <code>bullet</code> 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''
   
 
== Releases and Resources ==
 
== Releases and Resources ==
* Download on Hackage
+
* Download and installation from Hackage
 
** {{HackagePackage|id=reactive-banana}} - the FRP library itself
 
** {{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
 
** {{HackagePackage|id=reactive-banana-wx}} - binding to the [[wxHaskell]] GUI library
* Documentation
+
  +
* <span id="documentation">Documentation</span>
  +
** '''[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)]'''
  +
** [[FRP explanation using reactive-banana | Unofficial tutorial on the Haskell wiki]]
 
** [http://hackage.haskell.org/package/reactive-banana API reference]
 
** [http://hackage.haskell.org/package/reactive-banana API reference]
 
** '''[[/Examples/]]'''
 
** '''[[/Examples/]]'''
Line 28: Line 48:
 
* <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] <apfelmus at quantentunnel de>
** [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!]
** [http://stackoverflow.com/questions/ask?tags=reactive-programming+haskell Ask a question on StackOverflow]
+
** Questions? [http://stackoverflow.com/questions/ask?tags=reactive-programming+haskell+frp+reactive-banana Ask on StackOverflow!]
** Support the project with a tiny donation: [http://flattr.com/thing/384682/reactive-banana http://api.flattr.com/button/flattr-badge-large.png]
 
 
* Source code on github
 
* Source code on github
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/master/reactive-banana reactive-banana]
+
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/develop/reactive-banana reactive-banana] development branch
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/master/reactive-banana-wx reactive-banana-wx]
+
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/master/reactive-banana-wx reactive-banana-wx] master branch
** [https://github.com/HeinrichApfelmus/reactive-banana/ BlackBoard] - eat my own dogfood application
 
   
 
== External Links ==
 
== External Links ==
No external links yet.
+
* [https://github.com/bernstein/breakout breakout], a small game
   
   
Line 43: Line 63:
 
[[Category:wxHaskell]]
 
[[Category:wxHaskell]]
 
[[Category:Packages]]
 
[[Category:Packages]]
  +
[[Category:Robotics]]

Latest revision as of 00:12, 30 January 2014

Contents

[edit] 1 What is it?

Reactive banana displaying trigger-happy Behavior.

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

Support the project with a small donation: flattr-badge-large.png

FRP offers an elegant and concise way to express interactive programs such as graphical user interfaces, animations, 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.

  • 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 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 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.

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.

  • 29 January 2014: reactive-banana 0.8.0.0 released.
  • 21 November 2013: reactive-threepenny-gui deprecated again, because 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.
  • 15 May 2012: reactive-banana 0.6.0.0 released.
  • 25 March 2012: reactive-banana 0.5.0.0 released.
  • 24 October 2011: reactive-banana 0.4.3.0 released.
  • 26 September 2011: Added some more examples, reactive-banana 0.4.2.0 released.
  • 14 July 2011: Implemented many examples, reactive-banana 0.4.1.0 released.
  • 22 June 2011: reactive-banana 0.3.0.0 released
  • 28 April 2011: reactive-banana 0.2.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 Releases and Resources

[edit] 5 External Links