https://wiki.haskell.org/api.php?action=feedcontributions&user=Apfelmus&feedformat=atomHaskellWiki - User contributions [en]2024-03-19T09:53:51ZUser contributionsMediaWiki 1.35.5https://wiki.haskell.org/index.php?title=Operational&diff=66467Operational2023-12-29T20:48:05Z<p>Apfelmus: Replaced content with "''This page has been deprecated in favor of the project Readme:'' https://github.com/HeinrichApfelmus/operational#readme"</p>
<hr />
<div>''This page has been deprecated in favor of the project Readme:''<br />
<br />
https://github.com/HeinrichApfelmus/operational#readme</div>Apfelmushttps://wiki.haskell.org/index.php?title=Threepenny-gui&diff=62194Threepenny-gui2017-11-04T20:21:29Z<p>Apfelmus: /* Releases and Resources */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:right; width:16em; font-size:90%; font-family:serif; border:1px solid grey; padding:1ex;"><br />
<div><br />
Und der Haifisch, der hat Zähne<br><br />
Und die trägt er im Gesicht<br><br />
Und Macheath, der hat ein Messer<br><br />
Doch das Messer sieht man nicht.<br><br />
</div><br />
Bertold Brecht - ''The Threepenny Opera''<br />
</div><br />
''Threepenny-gui'' is a GUI framework that uses the web browser as a display.<br />
<br />
Features include:<br />
* '''Easy installation.''' Everyone has a reasonably modern web browser installed. Just install the library from hackage and you are ready to go. The library is cross-platform.<br />
* '''HTML''' + '''JavaScript'''. You have all capabilities of HTML at your disposal when creating user interfaces. This is a blessing, but it can also be a curse, so the library includes a few layout combinators to quickly create user interfaces without the need to deal with the mess that is CSS. A foreign function interface (FFI) allows you to execute JavaScript code in the browser.<br />
* [[Functional Reactive Programming]] ('''FRP''') promises to eliminate the spaghetti code that you usually get when using the traditional imperative event-based style for programming user interactions. Threepenny has an FRP library built-in, but its use is completely optional. Employ FRP when it is convenient and fall back to the traditional style when you hit an impasse.<br />
<br />
== What is it not? ==<br />
<br />
As cool as Threepenny may be, it is ...<br />
<br />
* ... not a web front-end. The server is meant to be run from localhost. Latency would be too high to use it as a web app. That said, it's perfectly stuitable for implementing multi-user apps on a local network, see the [https://github.com/HeinrichApfelmus/threepenny-gui/blob/master/samples/Chat.hs Chat.hs example].<br />
* ... not a JavaScript or HTML library. It's a GUI framework with a Haskell API and abstracts many aspects of the document object model. While some basic HTML skills are needed, no knowledge of JavaScript is required to use Threepenny, though you can include external client libraries if you really want to.<br />
<br />
If you want to write a web app, have a look at projects like [https://github.com/faylang/fay/wiki Fay], [https://github.com/ghcjs/ghcjs GHCJS] and [https://github.com/valderman/haste-compiler Haste]. That said, the Threepenny API may be ported to some of these projects as well in the future, but that is not the focus right now.<br />
<br />
== Status ==<br />
<br />
The library is still very much in flux, significant API changes are likely in future versions. The goal is make GUI programming as simple as possible, and that just needs some experimentation.<br />
<br />
* 29 April 2017 — Release of threepenny-gui-0.8.0.0<br />
* 16 September 2016 — Release of threepenny-gui-0.7.0.0<br />
* 15 May 2015 — Release of threepenny-gui-0.6.0.2<br />
* 3 May 2015 — Release of threepenny-gui-0.6.0.1<br />
* 4 October 2014 — Release of threepenny-gui-0.5.0.0<br />
* 21 November 2013 — Release of threepenny-gui-0.4.0.0<br />
* 7 September 2013 — Release of threepenny-gui-0.3.0.0<br />
<br />
== Gallery ==<br />
<br />
Applications written with Threepenny.<br />
<br />
<table><br />
<tr><br />
<td><br />
[http://fluffynukeit.com/?page_id=535 Daniel Austin's ''FNIStash'']<br />
<br>Editor for [http://en.wikipedia.org/wiki/Torchlight_II Torchlight 2] inventories.<br />
<br>[[Image:Threepenny-gui-fnistash.png|x300px]]<br />
<td><br />
[https://bitbucket.org/duplode/stunts-cartography Daniel Mlot's ''Stunts Cartography Track Viewer'']<br />
<br>Map viewer for the [http://scr.stunts.hu/ Stunts] racing game.<br />
<br>[[Image:Threepenny-gui-stunts.png|x300px]]<br />
<tr><br />
<td><br />
[https://github.com/blitzcode/hue-dashboard Tim Schröder's ''Hue Dashboard'']<br />
<br>Control smart lights ([http://www2.meethue.com/en-us Philips Hue])<br />
<br>[[Image:Threepenny-gui-hue-dashboard.jpg|x300px]]<br />
<td><br />
[https://wiki.haskell.org/Hoed Maarten Faddegon's ''Hoed'']<br />
<br>A lightweight tracer and algorithmic debugger for Haskell<br />
<br>[[Image:HoedExplore.png|386px]]<br />
<tr><br />
<td><br />
[https://github.com/CarstenKoenig/Holidays2013 Carsten König's holiday project]<br />
<br>Small viewer for the Mandelbrot set.<br />
<br>[[Image:Threepenny-gui-mandelbrot.png|300px]]<br />
<td><br />
[https://github.com/Chaddai/CurveProject Chaddai's ''CurveProject'']<br />
<br>Plotting curves for math teachers.<br />
<br>[[Image:Threepenny-gui-curveproject.jpg|386px]]<br />
</table><br />
<br />
== Releases and Resources ==<br />
* Download on Hackage<br />
** {{HackagePackage|id=threepenny-gui}}<br />
* <span id="documentation">Documentation</span><br />
** [http://hackage.haskell.org/package/threepenny-gui API reference]<br />
** '''[https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/samples#readme Examples]'''<br />
** [https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/doc/hal-2017 Tutorial slides from HaL 2017]<br />
** [https://github.com/yuvallanger/threepenny-gui/blob/tutorial/samples/BarTab.lhs A work in progress tutorial] by [https://github.com/yuvallanger Yuval Langer] - help will be dearly appreciated.<br />
** [http://apfelmus.nfshost.com/blog.html#gui-programming Developer Blog]<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus]<br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/threepenny-gui/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=haskell+threepenny-gui+gui Ask on StackOverflow!]<br />
** More questions? [mailto:apfelmus%20at%20quantentunnel%20de Email] or [https://hackhands.com/apfelmus live help]!<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/ threepenny-gui] master branch<br />
<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:Libraries]]<br />
[[Category:Packages]]<br />
[[Category:User interfaces]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Threepenny-gui&diff=61783Threepenny-gui2017-04-29T18:06:01Z<p>Apfelmus: /* Gallery */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:right; width:16em; font-size:90%; font-family:serif; border:1px solid grey; padding:1ex;"><br />
<div><br />
Und der Haifisch, der hat Zähne<br><br />
Und die trägt er im Gesicht<br><br />
Und Macheath, der hat ein Messer<br><br />
Doch das Messer sieht man nicht.<br><br />
</div><br />
Bertold Brecht - ''The Threepenny Opera''<br />
</div><br />
''Threepenny-gui'' is a GUI framework that uses the web browser as a display.<br />
<br />
Features include:<br />
* '''Easy installation.''' Everyone has a reasonably modern web browser installed. Just install the library from hackage and you are ready to go. The library is cross-platform.<br />
* '''HTML''' + '''JavaScript'''. You have all capabilities of HTML at your disposal when creating user interfaces. This is a blessing, but it can also be a curse, so the library includes a few layout combinators to quickly create user interfaces without the need to deal with the mess that is CSS. A foreign function interface (FFI) allows you to execute JavaScript code in the browser.<br />
* [[Functional Reactive Programming]] ('''FRP''') promises to eliminate the spaghetti code that you usually get when using the traditional imperative event-based style for programming user interactions. Threepenny has an FRP library built-in, but its use is completely optional. Employ FRP when it is convenient and fall back to the traditional style when you hit an impasse.<br />
<br />
== What is it not? ==<br />
<br />
As cool as Threepenny may be, it is ...<br />
<br />
* ... not a web front-end. The server is meant to be run from localhost. Latency would be too high to use it as a web app. That said, it's perfectly stuitable for implementing multi-user apps on a local network, see the [https://github.com/HeinrichApfelmus/threepenny-gui/blob/master/samples/Chat.hs Chat.hs example].<br />
* ... not a JavaScript or HTML library. It's a GUI framework with a Haskell API and abstracts many aspects of the document object model. While some basic HTML skills are needed, no knowledge of JavaScript is required to use Threepenny, though you can include external client libraries if you really want to.<br />
<br />
If you want to write a web app, have a look at projects like [https://github.com/faylang/fay/wiki Fay], [https://github.com/ghcjs/ghcjs GHCJS] and [https://github.com/valderman/haste-compiler Haste]. That said, the Threepenny API may be ported to some of these projects as well in the future, but that is not the focus right now.<br />
<br />
== Status ==<br />
<br />
The library is still very much in flux, significant API changes are likely in future versions. The goal is make GUI programming as simple as possible, and that just needs some experimentation.<br />
<br />
* 29 April 2017 — Release of threepenny-gui-0.8.0.0<br />
* 16 September 2016 — Release of threepenny-gui-0.7.0.0<br />
* 15 May 2015 — Release of threepenny-gui-0.6.0.2<br />
* 3 May 2015 — Release of threepenny-gui-0.6.0.1<br />
* 4 October 2014 — Release of threepenny-gui-0.5.0.0<br />
* 21 November 2013 — Release of threepenny-gui-0.4.0.0<br />
* 7 September 2013 — Release of threepenny-gui-0.3.0.0<br />
<br />
== Gallery ==<br />
<br />
Applications written with Threepenny.<br />
<br />
<table><br />
<tr><br />
<td><br />
[http://fluffynukeit.com/?page_id=535 Daniel Austin's ''FNIStash'']<br />
<br>Editor for [http://en.wikipedia.org/wiki/Torchlight_II Torchlight 2] inventories.<br />
<br>[[Image:Threepenny-gui-fnistash.png|x300px]]<br />
<td><br />
[https://bitbucket.org/duplode/stunts-cartography Daniel Mlot's ''Stunts Cartography Track Viewer'']<br />
<br>Map viewer for the [http://scr.stunts.hu/ Stunts] racing game.<br />
<br>[[Image:Threepenny-gui-stunts.png|x300px]]<br />
<tr><br />
<td><br />
[https://github.com/blitzcode/hue-dashboard Tim Schröder's ''Hue Dashboard'']<br />
<br>Control smart lights ([http://www2.meethue.com/en-us Philips Hue])<br />
<br>[[Image:Threepenny-gui-hue-dashboard.jpg|x300px]]<br />
<td><br />
[https://wiki.haskell.org/Hoed Maarten Faddegon's ''Hoed'']<br />
<br>A lightweight tracer and algorithmic debugger for Haskell<br />
<br>[[Image:HoedExplore.png|386px]]<br />
<tr><br />
<td><br />
[https://github.com/CarstenKoenig/Holidays2013 Carsten König's holiday project]<br />
<br>Small viewer for the Mandelbrot set.<br />
<br>[[Image:Threepenny-gui-mandelbrot.png|300px]]<br />
<td><br />
[https://github.com/Chaddai/CurveProject Chaddai's ''CurveProject'']<br />
<br>Plotting curves for math teachers.<br />
<br>[[Image:Threepenny-gui-curveproject.jpg|386px]]<br />
</table><br />
<br />
== Releases and Resources ==<br />
* Download on Hackage<br />
** {{HackagePackage|id=threepenny-gui}}<br />
* <span id="documentation">Documentation</span><br />
** [http://hackage.haskell.org/package/threepenny-gui API reference]<br />
** '''[https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/samples#readme Examples]'''<br />
** [http://apfelmus.nfshost.com/blog.html#gui-programming Developer Blog]<br />
** [https://github.com/yuvallanger/threepenny-gui/blob/tutorial/samples/BarTab.lhs A work in progress tutorial] by [https://github.com/yuvallanger Yuval Langer] - help will be dearly appreciated.<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus]<br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/threepenny-gui/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=haskell+threepenny-gui+gui Ask on StackOverflow!]<br />
** More questions? [mailto:apfelmus%20at%20quantentunnel%20de Email] or [https://hackhands.com/apfelmus live help]!<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/ threepenny-gui] master branch<br />
<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:Libraries]]<br />
[[Category:Packages]]<br />
[[Category:User interfaces]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Threepenny-gui&diff=61782Threepenny-gui2017-04-29T18:05:19Z<p>Apfelmus: /* Status */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:right; width:16em; font-size:90%; font-family:serif; border:1px solid grey; padding:1ex;"><br />
<div><br />
Und der Haifisch, der hat Zähne<br><br />
Und die trägt er im Gesicht<br><br />
Und Macheath, der hat ein Messer<br><br />
Doch das Messer sieht man nicht.<br><br />
</div><br />
Bertold Brecht - ''The Threepenny Opera''<br />
</div><br />
''Threepenny-gui'' is a GUI framework that uses the web browser as a display.<br />
<br />
Features include:<br />
* '''Easy installation.''' Everyone has a reasonably modern web browser installed. Just install the library from hackage and you are ready to go. The library is cross-platform.<br />
* '''HTML''' + '''JavaScript'''. You have all capabilities of HTML at your disposal when creating user interfaces. This is a blessing, but it can also be a curse, so the library includes a few layout combinators to quickly create user interfaces without the need to deal with the mess that is CSS. A foreign function interface (FFI) allows you to execute JavaScript code in the browser.<br />
* [[Functional Reactive Programming]] ('''FRP''') promises to eliminate the spaghetti code that you usually get when using the traditional imperative event-based style for programming user interactions. Threepenny has an FRP library built-in, but its use is completely optional. Employ FRP when it is convenient and fall back to the traditional style when you hit an impasse.<br />
<br />
== What is it not? ==<br />
<br />
As cool as Threepenny may be, it is ...<br />
<br />
* ... not a web front-end. The server is meant to be run from localhost. Latency would be too high to use it as a web app. That said, it's perfectly stuitable for implementing multi-user apps on a local network, see the [https://github.com/HeinrichApfelmus/threepenny-gui/blob/master/samples/Chat.hs Chat.hs example].<br />
* ... not a JavaScript or HTML library. It's a GUI framework with a Haskell API and abstracts many aspects of the document object model. While some basic HTML skills are needed, no knowledge of JavaScript is required to use Threepenny, though you can include external client libraries if you really want to.<br />
<br />
If you want to write a web app, have a look at projects like [https://github.com/faylang/fay/wiki Fay], [https://github.com/ghcjs/ghcjs GHCJS] and [https://github.com/valderman/haste-compiler Haste]. That said, the Threepenny API may be ported to some of these projects as well in the future, but that is not the focus right now.<br />
<br />
== Status ==<br />
<br />
The library is still very much in flux, significant API changes are likely in future versions. The goal is make GUI programming as simple as possible, and that just needs some experimentation.<br />
<br />
* 29 April 2017 — Release of threepenny-gui-0.8.0.0<br />
* 16 September 2016 — Release of threepenny-gui-0.7.0.0<br />
* 15 May 2015 — Release of threepenny-gui-0.6.0.2<br />
* 3 May 2015 — Release of threepenny-gui-0.6.0.1<br />
* 4 October 2014 — Release of threepenny-gui-0.5.0.0<br />
* 21 November 2013 — Release of threepenny-gui-0.4.0.0<br />
* 7 September 2013 — Release of threepenny-gui-0.3.0.0<br />
<br />
== Gallery ==<br />
<br />
Applications written with Threepenny.<br />
<br />
<table><br />
<tr><br />
<td><br />
[http://fluffynukeit.com/?page_id=535 Daniel Austin's ''FNIStash'']<br />
<br>Editor for [http://en.wikipedia.org/wiki/Torchlight_II Torchlight 2] inventories.<br />
<br>[[Image:Threepenny-gui-fnistash.png|x300px]]<br />
<td><br />
[https://bitbucket.org/duplode/stunts-cartography Daniel Mlot's ''Stunts Cartography Track Viewer'']<br />
<br>Map viewer for the [http://scr.stunts.hu/ Stunts] racing game.<br />
<br>[[Image:Threepenny-gui-stunts.png|x300px]]<br />
<tr><br />
<td><br />
[https://github.com/CarstenKoenig/Holidays2013 Carsten König's holiday project]<br />
<br>Small viewer for the Mandelbrot set.<br />
<br>[[Image:Threepenny-gui-mandelbrot.png|300px]]<br />
<td><br />
[https://github.com/Chaddai/CurveProject Chaddai's ''CurveProject'']<br />
<br>Plotting curves for math teachers.<br />
<br>[[Image:Threepenny-gui-curveproject.jpg|386px]]<br />
<tr><br />
<td><br />
[https://github.com/blitzcode/hue-dashboard Tim Schröder's ''Hue Dashboard'']<br />
<br>Control smart lights ([http://www2.meethue.com/en-us Philips Hue])<br />
<br>[[Image:Threepenny-gui-hue-dashboard.jpg|x300px]]<br />
<td><br />
[https://wiki.haskell.org/Hoed Maarten Faddegon's ''Hoed'']<br />
<br>A lightweight tracer and algorithmic debugger for Haskell<br />
<br>[[Image:HoedExplore.png|386px]]<br />
</table><br />
<br />
== Releases and Resources ==<br />
* Download on Hackage<br />
** {{HackagePackage|id=threepenny-gui}}<br />
* <span id="documentation">Documentation</span><br />
** [http://hackage.haskell.org/package/threepenny-gui API reference]<br />
** '''[https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/samples#readme Examples]'''<br />
** [http://apfelmus.nfshost.com/blog.html#gui-programming Developer Blog]<br />
** [https://github.com/yuvallanger/threepenny-gui/blob/tutorial/samples/BarTab.lhs A work in progress tutorial] by [https://github.com/yuvallanger Yuval Langer] - help will be dearly appreciated.<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus]<br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/threepenny-gui/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=haskell+threepenny-gui+gui Ask on StackOverflow!]<br />
** More questions? [mailto:apfelmus%20at%20quantentunnel%20de Email] or [https://hackhands.com/apfelmus live help]!<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/ threepenny-gui] master branch<br />
<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:Libraries]]<br />
[[Category:Packages]]<br />
[[Category:User interfaces]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Threepenny-gui&diff=61738Threepenny-gui2017-04-17T19:57:15Z<p>Apfelmus: /* Gallery */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:right; width:16em; font-size:90%; font-family:serif; border:1px solid grey; padding:1ex;"><br />
<div><br />
Und der Haifisch, der hat Zähne<br><br />
Und die trägt er im Gesicht<br><br />
Und Macheath, der hat ein Messer<br><br />
Doch das Messer sieht man nicht.<br><br />
</div><br />
Bertold Brecht - ''The Threepenny Opera''<br />
</div><br />
''Threepenny-gui'' is a GUI framework that uses the web browser as a display.<br />
<br />
Features include:<br />
* '''Easy installation.''' Everyone has a reasonably modern web browser installed. Just install the library from hackage and you are ready to go. The library is cross-platform.<br />
* '''HTML''' + '''JavaScript'''. You have all capabilities of HTML at your disposal when creating user interfaces. This is a blessing, but it can also be a curse, so the library includes a few layout combinators to quickly create user interfaces without the need to deal with the mess that is CSS. A foreign function interface (FFI) allows you to execute JavaScript code in the browser.<br />
* [[Functional Reactive Programming]] ('''FRP''') promises to eliminate the spaghetti code that you usually get when using the traditional imperative event-based style for programming user interactions. Threepenny has an FRP library built-in, but its use is completely optional. Employ FRP when it is convenient and fall back to the traditional style when you hit an impasse.<br />
<br />
== What is it not? ==<br />
<br />
As cool as Threepenny may be, it is ...<br />
<br />
* ... not a web front-end. The server is meant to be run from localhost. Latency would be too high to use it as a web app. That said, it's perfectly stuitable for implementing multi-user apps on a local network, see the [https://github.com/HeinrichApfelmus/threepenny-gui/blob/master/samples/Chat.hs Chat.hs example].<br />
* ... not a JavaScript or HTML library. It's a GUI framework with a Haskell API and abstracts many aspects of the document object model. While some basic HTML skills are needed, no knowledge of JavaScript is required to use Threepenny, though you can include external client libraries if you really want to.<br />
<br />
If you want to write a web app, have a look at projects like [https://github.com/faylang/fay/wiki Fay], [https://github.com/ghcjs/ghcjs GHCJS] and [https://github.com/valderman/haste-compiler Haste]. That said, the Threepenny API may be ported to some of these projects as well in the future, but that is not the focus right now.<br />
<br />
== Status ==<br />
<br />
The library is still very much in flux, significant API changes are likely in future versions. The goal is make GUI programming as simple as possible, and that just needs some experimentation.<br />
<br />
* 16 September 2016 — Release of threepenny-gui-0.7.0.0<br />
* 15 May 2015 — Release of threepenny-gui-0.6.0.2<br />
* 3 May 2015 — Release of threepenny-gui-0.6.0.1<br />
* 4 October 2014 — Release of threepenny-gui-0.5.0.0<br />
* 21 November 2013 — Release of threepenny-gui-0.4.0.0<br />
* 7 September 2013 — Release of threepenny-gui-0.3.0.0<br />
<br />
== Gallery ==<br />
<br />
Applications written with Threepenny.<br />
<br />
<table><br />
<tr><br />
<td><br />
[http://fluffynukeit.com/?page_id=535 Daniel Austin's ''FNIStash'']<br />
<br>Editor for [http://en.wikipedia.org/wiki/Torchlight_II Torchlight 2] inventories.<br />
<br>[[Image:Threepenny-gui-fnistash.png|x300px]]<br />
<td><br />
[https://bitbucket.org/duplode/stunts-cartography Daniel Mlot's ''Stunts Cartography Track Viewer'']<br />
<br>Map viewer for the [http://scr.stunts.hu/ Stunts] racing game.<br />
<br>[[Image:Threepenny-gui-stunts.png|x300px]]<br />
<tr><br />
<td><br />
[https://github.com/CarstenKoenig/Holidays2013 Carsten König's holiday project]<br />
<br>Small viewer for the Mandelbrot set.<br />
<br>[[Image:Threepenny-gui-mandelbrot.png|300px]]<br />
<td><br />
[https://github.com/Chaddai/CurveProject Chaddai's ''CurveProject'']<br />
<br>Plotting curves for math teachers.<br />
<br>[[Image:Threepenny-gui-curveproject.jpg|386px]]<br />
<tr><br />
<td><br />
[https://github.com/blitzcode/hue-dashboard Tim Schröder's ''Hue Dashboard'']<br />
<br>Control smart lights ([http://www2.meethue.com/en-us Philips Hue])<br />
<br>[[Image:Threepenny-gui-hue-dashboard.jpg|x300px]]<br />
<td><br />
[https://wiki.haskell.org/Hoed Maarten Faddegon's ''Hoed'']<br />
<br>A lightweight tracer and algorithmic debugger for Haskell<br />
<br>[[Image:HoedExplore.png|386px]]<br />
</table><br />
<br />
== Releases and Resources ==<br />
* Download on Hackage<br />
** {{HackagePackage|id=threepenny-gui}}<br />
* <span id="documentation">Documentation</span><br />
** [http://hackage.haskell.org/package/threepenny-gui API reference]<br />
** '''[https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/samples#readme Examples]'''<br />
** [http://apfelmus.nfshost.com/blog.html#gui-programming Developer Blog]<br />
** [https://github.com/yuvallanger/threepenny-gui/blob/tutorial/samples/BarTab.lhs A work in progress tutorial] by [https://github.com/yuvallanger Yuval Langer] - help will be dearly appreciated.<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus]<br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/threepenny-gui/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=haskell+threepenny-gui+gui Ask on StackOverflow!]<br />
** More questions? [mailto:apfelmus%20at%20quantentunnel%20de Email] or [https://hackhands.com/apfelmus live help]!<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/ threepenny-gui] master branch<br />
<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:Libraries]]<br />
[[Category:Packages]]<br />
[[Category:User interfaces]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=File:Threepenny-gui-hue-dashboard.jpg&diff=61737File:Threepenny-gui-hue-dashboard.jpg2017-04-17T19:54:50Z<p>Apfelmus: </p>
<hr />
<div></div>Apfelmushttps://wiki.haskell.org/index.php?title=Threepenny-gui&diff=61119Threepenny-gui2016-09-16T18:56:21Z<p>Apfelmus: /* Gallery */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:right; width:16em; font-size:90%; font-family:serif; border:1px solid grey; padding:1ex;"><br />
<div><br />
Und der Haifisch, der hat Zähne<br><br />
Und die trägt er im Gesicht<br><br />
Und Macheath, der hat ein Messer<br><br />
Doch das Messer sieht man nicht.<br><br />
</div><br />
Bertold Brecht - ''The Threepenny Opera''<br />
</div><br />
''Threepenny-gui'' is a GUI framework that uses the web browser as a display.<br />
<br />
Features include:<br />
* '''Easy installation.''' Everyone has a reasonably modern web browser installed. Just install the library from hackage and you are ready to go. The library is cross-platform.<br />
* '''HTML''' + '''JavaScript'''. You have all capabilities of HTML at your disposal when creating user interfaces. This is a blessing, but it can also be a curse, so the library includes a few layout combinators to quickly create user interfaces without the need to deal with the mess that is CSS. A foreign function interface (FFI) allows you to execute JavaScript code in the browser.<br />
* [[Functional Reactive Programming]] ('''FRP''') promises to eliminate the spaghetti code that you usually get when using the traditional imperative event-based style for programming user interactions. Threepenny has an FRP library built-in, but its use is completely optional. Employ FRP when it is convenient and fall back to the traditional style when you hit an impasse.<br />
<br />
== What is it not? ==<br />
<br />
As cool as Threepenny may be, it is ...<br />
<br />
* ... not a web front-end. The server is meant to be run from localhost. Latency would be too high to use it as a web app. That said, it's perfectly stuitable for implementing multi-user apps on a local network, see the [https://github.com/HeinrichApfelmus/threepenny-gui/blob/master/samples/Chat.hs Chat.hs example].<br />
* ... not a JavaScript or HTML library. It's a GUI framework with a Haskell API and abstracts many aspects of the document object model. While some basic HTML skills are needed, no knowledge of JavaScript is required to use Threepenny, though you can include external client libraries if you really want to.<br />
<br />
If you want to write a web app, have a look at projects like [https://github.com/faylang/fay/wiki Fay], [https://github.com/ghcjs/ghcjs GHCJS] and [https://github.com/valderman/haste-compiler Haste]. That said, the Threepenny API may be ported to some of these projects as well in the future, but that is not the focus right now.<br />
<br />
== Status ==<br />
<br />
The library is still very much in flux, significant API changes are likely in future versions. The goal is make GUI programming as simple as possible, and that just needs some experimentation.<br />
<br />
* 16 September 2016 — Release of threepenny-gui-0.7.0.0<br />
* 15 May 2015 — Release of threepenny-gui-0.6.0.2<br />
* 3 May 2015 — Release of threepenny-gui-0.6.0.1<br />
* 4 October 2014 — Release of threepenny-gui-0.5.0.0<br />
* 21 November 2013 — Release of threepenny-gui-0.4.0.0<br />
* 7 September 2013 — Release of threepenny-gui-0.3.0.0<br />
<br />
== Gallery ==<br />
<br />
Applications written with Threepenny.<br />
<br />
<table><br />
<tr><br />
<td><br />
[http://fluffynukeit.com/?page_id=535 Daniel Austin's ''FNIStash'']<br />
<br>Editor for [http://en.wikipedia.org/wiki/Torchlight_II Torchlight 2] inventories.<br />
<br>[[Image:Threepenny-gui-fnistash.png|x300px]]<br />
<td><br />
[https://bitbucket.org/duplode/stunts-cartography Daniel Mlot's ''Stunts Cartography Track Viewer'']<br />
<br>Map viewer for the [http://scr.stunts.hu/ Stunts] racing game.<br />
<br>[[Image:Threepenny-gui-stunts.png|x300px]]<br />
<tr><br />
<td><br />
[https://github.com/CarstenKoenig/Holidays2013 Carsten König's holiday project]<br />
<br>Small viewer for the Mandelbrot set.<br />
<br>[[Image:Threepenny-gui-mandelbrot.png|300px]]<br />
<td><br />
[https://github.com/Chaddai/CurveProject Chaddai's ''CurveProject'']<br />
<br>Plotting curves for math teachers.<br />
<br>[[Image:Threepenny-gui-curveproject.jpg|386px]]<br />
<tr><br />
<td><br />
<td><br />
[https://wiki.haskell.org/Hoed Maarten Faddegon's ''Hoed'']<br />
<br>A lightweight tracer and algorithmic debugger for Haskell<br />
<br>[[Image:HoedExplore.png|386px]]<br />
</table><br />
<br />
== Releases and Resources ==<br />
* Download on Hackage<br />
** {{HackagePackage|id=threepenny-gui}}<br />
* <span id="documentation">Documentation</span><br />
** [http://hackage.haskell.org/package/threepenny-gui API reference]<br />
** '''[https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/samples#readme Examples]'''<br />
** [http://apfelmus.nfshost.com/blog.html#gui-programming Developer Blog]<br />
** [https://github.com/yuvallanger/threepenny-gui/blob/tutorial/samples/BarTab.lhs A work in progress tutorial] by [https://github.com/yuvallanger Yuval Langer] - help will be dearly appreciated.<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus]<br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/threepenny-gui/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=haskell+threepenny-gui+gui Ask on StackOverflow!]<br />
** More questions? [mailto:apfelmus%20at%20quantentunnel%20de Email] or [https://hackhands.com/apfelmus live help]!<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/ threepenny-gui] master branch<br />
<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:Libraries]]<br />
[[Category:Packages]]<br />
[[Category:User interfaces]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Threepenny-gui&diff=61118Threepenny-gui2016-09-16T18:55:36Z<p>Apfelmus: /* Gallery */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:right; width:16em; font-size:90%; font-family:serif; border:1px solid grey; padding:1ex;"><br />
<div><br />
Und der Haifisch, der hat Zähne<br><br />
Und die trägt er im Gesicht<br><br />
Und Macheath, der hat ein Messer<br><br />
Doch das Messer sieht man nicht.<br><br />
</div><br />
Bertold Brecht - ''The Threepenny Opera''<br />
</div><br />
''Threepenny-gui'' is a GUI framework that uses the web browser as a display.<br />
<br />
Features include:<br />
* '''Easy installation.''' Everyone has a reasonably modern web browser installed. Just install the library from hackage and you are ready to go. The library is cross-platform.<br />
* '''HTML''' + '''JavaScript'''. You have all capabilities of HTML at your disposal when creating user interfaces. This is a blessing, but it can also be a curse, so the library includes a few layout combinators to quickly create user interfaces without the need to deal with the mess that is CSS. A foreign function interface (FFI) allows you to execute JavaScript code in the browser.<br />
* [[Functional Reactive Programming]] ('''FRP''') promises to eliminate the spaghetti code that you usually get when using the traditional imperative event-based style for programming user interactions. Threepenny has an FRP library built-in, but its use is completely optional. Employ FRP when it is convenient and fall back to the traditional style when you hit an impasse.<br />
<br />
== What is it not? ==<br />
<br />
As cool as Threepenny may be, it is ...<br />
<br />
* ... not a web front-end. The server is meant to be run from localhost. Latency would be too high to use it as a web app. That said, it's perfectly stuitable for implementing multi-user apps on a local network, see the [https://github.com/HeinrichApfelmus/threepenny-gui/blob/master/samples/Chat.hs Chat.hs example].<br />
* ... not a JavaScript or HTML library. It's a GUI framework with a Haskell API and abstracts many aspects of the document object model. While some basic HTML skills are needed, no knowledge of JavaScript is required to use Threepenny, though you can include external client libraries if you really want to.<br />
<br />
If you want to write a web app, have a look at projects like [https://github.com/faylang/fay/wiki Fay], [https://github.com/ghcjs/ghcjs GHCJS] and [https://github.com/valderman/haste-compiler Haste]. That said, the Threepenny API may be ported to some of these projects as well in the future, but that is not the focus right now.<br />
<br />
== Status ==<br />
<br />
The library is still very much in flux, significant API changes are likely in future versions. The goal is make GUI programming as simple as possible, and that just needs some experimentation.<br />
<br />
* 16 September 2016 — Release of threepenny-gui-0.7.0.0<br />
* 15 May 2015 — Release of threepenny-gui-0.6.0.2<br />
* 3 May 2015 — Release of threepenny-gui-0.6.0.1<br />
* 4 October 2014 — Release of threepenny-gui-0.5.0.0<br />
* 21 November 2013 — Release of threepenny-gui-0.4.0.0<br />
* 7 September 2013 — Release of threepenny-gui-0.3.0.0<br />
<br />
== Gallery ==<br />
<br />
Applications written with Threepenny.<br />
<br />
<table><br />
<tr><br />
<td><br />
[http://fluffynukeit.com/?page_id=535 Daniel Austin's ''FNIStash'']<br />
<br>Editor for [http://en.wikipedia.org/wiki/Torchlight_II Torchlight 2] inventories.<br />
<br>[[Image:Threepenny-gui-fnistash.png|x300px]]<br />
<td><br />
[https://bitbucket.org/duplode/stunts-cartography Daniel Mlot's ''Stunts Cartography Track Viewer'']<br />
<br>Map viewer for the [http://scr.stunts.hu/ Stunts] racing game.<br />
<br>[[Image:Threepenny-gui-stunts.png|x300px]]<br />
<tr><br />
<td><br />
[https://github.com/CarstenKoenig/Holidays2013 Carsten König's holiday project]<br />
<br>Small viewer for the Mandelbrot set.<br />
<br>[[Image:Threepenny-gui-mandelbrot.png|300px]]<br />
<td><br />
[https://github.com/Chaddai/CurveProject Chaddai's ''CurveProject'']<br />
<br>Plotting curves for math teachers.<br />
<br>[[Image:Threepenny-gui-curveproject.jpg|386px]]<br />
<tr><br />
<td><br />
<td><br />
[https://github.com/Chaddai/CurveProject Maarten Faddegon's ''Hoed'']<br />
<br>A lightweight tracer and algorithmic debugger for Haskell<br />
<br>[[Image:HoedExplore.png|386px]]<br />
</table><br />
<br />
== Releases and Resources ==<br />
* Download on Hackage<br />
** {{HackagePackage|id=threepenny-gui}}<br />
* <span id="documentation">Documentation</span><br />
** [http://hackage.haskell.org/package/threepenny-gui API reference]<br />
** '''[https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/samples#readme Examples]'''<br />
** [http://apfelmus.nfshost.com/blog.html#gui-programming Developer Blog]<br />
** [https://github.com/yuvallanger/threepenny-gui/blob/tutorial/samples/BarTab.lhs A work in progress tutorial] by [https://github.com/yuvallanger Yuval Langer] - help will be dearly appreciated.<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus]<br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/threepenny-gui/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=haskell+threepenny-gui+gui Ask on StackOverflow!]<br />
** More questions? [mailto:apfelmus%20at%20quantentunnel%20de Email] or [https://hackhands.com/apfelmus live help]!<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/ threepenny-gui] master branch<br />
<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:Libraries]]<br />
[[Category:Packages]]<br />
[[Category:User interfaces]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Threepenny-gui&diff=61117Threepenny-gui2016-09-16T14:16:18Z<p>Apfelmus: /* Status */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:right; width:16em; font-size:90%; font-family:serif; border:1px solid grey; padding:1ex;"><br />
<div><br />
Und der Haifisch, der hat Zähne<br><br />
Und die trägt er im Gesicht<br><br />
Und Macheath, der hat ein Messer<br><br />
Doch das Messer sieht man nicht.<br><br />
</div><br />
Bertold Brecht - ''The Threepenny Opera''<br />
</div><br />
''Threepenny-gui'' is a GUI framework that uses the web browser as a display.<br />
<br />
Features include:<br />
* '''Easy installation.''' Everyone has a reasonably modern web browser installed. Just install the library from hackage and you are ready to go. The library is cross-platform.<br />
* '''HTML''' + '''JavaScript'''. You have all capabilities of HTML at your disposal when creating user interfaces. This is a blessing, but it can also be a curse, so the library includes a few layout combinators to quickly create user interfaces without the need to deal with the mess that is CSS. A foreign function interface (FFI) allows you to execute JavaScript code in the browser.<br />
* [[Functional Reactive Programming]] ('''FRP''') promises to eliminate the spaghetti code that you usually get when using the traditional imperative event-based style for programming user interactions. Threepenny has an FRP library built-in, but its use is completely optional. Employ FRP when it is convenient and fall back to the traditional style when you hit an impasse.<br />
<br />
== What is it not? ==<br />
<br />
As cool as Threepenny may be, it is ...<br />
<br />
* ... not a web front-end. The server is meant to be run from localhost. Latency would be too high to use it as a web app. That said, it's perfectly stuitable for implementing multi-user apps on a local network, see the [https://github.com/HeinrichApfelmus/threepenny-gui/blob/master/samples/Chat.hs Chat.hs example].<br />
* ... not a JavaScript or HTML library. It's a GUI framework with a Haskell API and abstracts many aspects of the document object model. While some basic HTML skills are needed, no knowledge of JavaScript is required to use Threepenny, though you can include external client libraries if you really want to.<br />
<br />
If you want to write a web app, have a look at projects like [https://github.com/faylang/fay/wiki Fay], [https://github.com/ghcjs/ghcjs GHCJS] and [https://github.com/valderman/haste-compiler Haste]. That said, the Threepenny API may be ported to some of these projects as well in the future, but that is not the focus right now.<br />
<br />
== Status ==<br />
<br />
The library is still very much in flux, significant API changes are likely in future versions. The goal is make GUI programming as simple as possible, and that just needs some experimentation.<br />
<br />
* 16 September 2016 — Release of threepenny-gui-0.7.0.0<br />
* 15 May 2015 — Release of threepenny-gui-0.6.0.2<br />
* 3 May 2015 — Release of threepenny-gui-0.6.0.1<br />
* 4 October 2014 — Release of threepenny-gui-0.5.0.0<br />
* 21 November 2013 — Release of threepenny-gui-0.4.0.0<br />
* 7 September 2013 — Release of threepenny-gui-0.3.0.0<br />
<br />
== Gallery ==<br />
<br />
Applications written with Threepenny.<br />
<br />
<table><br />
<tr><br />
<td><br />
[http://fluffynukeit.com/?page_id=535 Daniel Austin's ''FNIStash'']<br />
<br>Editor for [http://en.wikipedia.org/wiki/Torchlight_II Torchlight 2] inventories.<br />
<br>[[Image:Threepenny-gui-fnistash.png|x300px]]<br />
<td><br />
[https://bitbucket.org/duplode/stunts-cartography Daniel Mlot's ''Stunts Cartography Track Viewer'']<br />
<br>Map viewer for the [http://scr.stunts.hu/ Stunts] racing game.<br />
<br>[[Image:Threepenny-gui-stunts.png|x300px]]<br />
<tr><br />
<td><br />
[https://github.com/CarstenKoenig/Holidays2013 Carsten König's holiday project]<br />
<br>Small viewer for the Mandelbrot set.<br />
<br>[[Image:Threepenny-gui-mandelbrot.png|300px]]<br />
<td><br />
[https://github.com/Chaddai/CurveProject Chaddai's ''CurveProject'']<br />
<br>Plotting curves for math teachers.<br />
<br>[[Image:Threepenny-gui-curveproject.jpg|386px]]<br />
</table><br />
<br />
== Releases and Resources ==<br />
* Download on Hackage<br />
** {{HackagePackage|id=threepenny-gui}}<br />
* <span id="documentation">Documentation</span><br />
** [http://hackage.haskell.org/package/threepenny-gui API reference]<br />
** '''[https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/samples#readme Examples]'''<br />
** [http://apfelmus.nfshost.com/blog.html#gui-programming Developer Blog]<br />
** [https://github.com/yuvallanger/threepenny-gui/blob/tutorial/samples/BarTab.lhs A work in progress tutorial] by [https://github.com/yuvallanger Yuval Langer] - help will be dearly appreciated.<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus]<br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/threepenny-gui/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=haskell+threepenny-gui+gui Ask on StackOverflow!]<br />
** More questions? [mailto:apfelmus%20at%20quantentunnel%20de Email] or [https://hackhands.com/apfelmus live help]!<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/ threepenny-gui] master branch<br />
<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:Libraries]]<br />
[[Category:Packages]]<br />
[[Category:User interfaces]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Reactive-banana&diff=60491Reactive-banana2016-01-04T21:05:31Z<p>Apfelmus: /* Status */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:left;"><br />
[[Image:Reactive-Banana-banana.png|Reactive banana displaying trigger-happy <code>Behavior</code>.]]</div><br />
''Reactive-banana'' is a library for [[Functional Reactive Programming]] (FRP).<br />
<br />
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.<br />
<br />
The goal of the library is to provide a solid foundation.<br />
* 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.<br />
* The library features an '''efficient implementation'''. No more spooky time leaks, predicting space & time usage should be straightforward.<br />
* A plethora of '''[[#documentation|example code]]''' helps with getting started.<br />
<br />
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.<br />
<br />
[[#feedback|Feedback]] is welcome, I want to hear from you!<br />
<br />
== Status ==<br />
<br />
Current development focuses on performance. Applications to GUI programming are explored in the sister project [[Threepenny-gui|threepenny-gui]].<br />
<br />
* 04 January 2016: reactive-banana 1.1.0.0 released.<br />
* 29 October 2015: reactive-banana 1.0.0.0 released. Milestone.<br />
* 27 August 2015: reactive-banana 0.9.0.0 released.<br />
* 29 January 2014: reactive-banana 0.8.0.0 released.<br />
<!--<br />
* 21 November 2013: reactive-threepenny-gui deprecated again, because [[Threepenny-gui|threepenny-gui]] now has its own FRP subsystem built-in.<br />
* 02 August 2013: Initial release of reactive-banana-threepenny. Binds to the threepenny-gui GUI library.<br />
* 26 August 2012: reactive-banana 0.7.0.0 released. Features dynamic event switching.<br />
* 15 May 2012: reactive-banana 0.6.0.0 released.<br />
* 25 March 2012: reactive-banana 0.5.0.0 released.<br />
* 24 October 2011: reactive-banana 0.4.3.0 released.<br />
* 26 September 2011: Added some more examples, reactive-banana 0.4.2.0 released.<br />
* 14 July 2011: Implemented many examples, reactive-banana 0.4.1.0 released.<br />
* 22 June 2011: reactive-banana 0.3.0.0 released<br />
* 28 April 2011: reactive-banana 0.2.0.0 released<br />
--><br />
<br />
== Fake Testimonials ==<br />
<br />
"In the programming-language world, one rule of survival is simple: dance or die. This library makes dancing easy." – ''Simon Banana Jones''<br />
<br />
"About the use of language: it is impossible to sharpen a pencil with a blunt axe. You should try reactive-banana instead." — ''Event Dijkstra''<br />
<br />
"When I need a <code>bullet</code> event, I can just trigger it." — ''Billy the Reactive Banana''<br />
<br />
"This should be in a museum!" — ''Banana Jones''<br />
<br />
"Hey Mister! Why not use reactive-banana as a smartphone app to brush your teeth?" — ''Tommy "Banana" Johnson''<br />
<br />
== Documentation ==<br />
* <span id="documentation">Documentation</span><br />
** '''[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)]'''<br />
** [[FRP explanation using reactive-banana | Unofficial tutorial on the Haskell wiki]]<br />
** '''[http://hackage.haskell.org/package/reactive-banana API reference]'''<br />
** '''[[/Examples/]]'''<br />
** [http://apfelmus.nfshost.com/blog.html#functional-reactive-programming-frp Developer Blog]<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus]<br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/reactive-banana/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=reactive-programming+haskell+frp+reactive-banana Ask on StackOverflow!]<br />
** More questions? [mailto:apfelmus%20at%20quantentunnel%20de Email] or [https://hackhands.com/apfelmus live help]!<br />
<br />
== Downloads and Source Code ==<br />
* Download and installation from Hackage<br />
** {{HackagePackage|id=reactive-banana}} - the FRP library itself<br />
** {{HackagePackage|id=reactive-banana-sdl}} - binding to the [[SDL]] library<br />
** {{HackagePackage|id=reactive-banana-wx}} - binding to the [[wxHaskell]] GUI library<br />
<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/master/reactive-banana reactive-banana] master branch<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/master/reactive-banana-wx reactive-banana-wx] master branch<br />
<br />
== External Links ==<br />
* [https://github.com/bernstein/breakout breakout], a small game<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:User interfaces]]<br />
[[Category:Libraries]]<br />
[[Category:wxHaskell]]<br />
[[Category:Packages]]<br />
[[Category:Robotics]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Reactive-banana&diff=60302Reactive-banana2015-10-29T18:02:24Z<p>Apfelmus: /* Documentation */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:left;"><br />
[[Image:Reactive-Banana-banana.png|Reactive banana displaying trigger-happy <code>Behavior</code>.]]</div><br />
''Reactive-banana'' is a library for [[Functional Reactive Programming]] (FRP).<br />
<br />
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.<br />
<br />
The goal of the library is to provide a solid foundation.<br />
* 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.<br />
* The library features an '''efficient implementation'''. No more spooky time leaks, predicting space & time usage should be straightforward.<br />
* A plethora of '''[[#documentation|example code]]''' helps with getting started.<br />
<br />
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.<br />
<br />
[[#feedback|Feedback]] is welcome, I want to hear from you!<br />
<br />
== Status ==<br />
<br />
Current development focuses on performance. Applications to GUI programming are explored in the sister project [[Threepenny-gui|threepenny-gui]].<br />
<br />
* 29 October 2015: reactive-banana 1.0.0.0 released. Milestone.<br />
* 27 August 2015: reactive-banana 0.9.0.0 released.<br />
* 29 January 2014: reactive-banana 0.8.0.0 released.<br />
<!--<br />
* 21 November 2013: reactive-threepenny-gui deprecated again, because [[Threepenny-gui|threepenny-gui]] now has its own FRP subsystem built-in.<br />
* 02 August 2013: Initial release of reactive-banana-threepenny. Binds to the threepenny-gui GUI library.<br />
* 26 August 2012: reactive-banana 0.7.0.0 released. Features dynamic event switching.<br />
* 15 May 2012: reactive-banana 0.6.0.0 released.<br />
* 25 March 2012: reactive-banana 0.5.0.0 released.<br />
* 24 October 2011: reactive-banana 0.4.3.0 released.<br />
* 26 September 2011: Added some more examples, reactive-banana 0.4.2.0 released.<br />
* 14 July 2011: Implemented many examples, reactive-banana 0.4.1.0 released.<br />
* 22 June 2011: reactive-banana 0.3.0.0 released<br />
* 28 April 2011: reactive-banana 0.2.0.0 released<br />
--><br />
<br />
== Fake Testimonials ==<br />
<br />
"In the programming-language world, one rule of survival is simple: dance or die. This library makes dancing easy." – ''Simon Banana Jones''<br />
<br />
"About the use of language: it is impossible to sharpen a pencil with a blunt axe. You should try reactive-banana instead." — ''Event Dijkstra''<br />
<br />
"When I need a <code>bullet</code> event, I can just trigger it." — ''Billy the Reactive Banana''<br />
<br />
"This should be in a museum!" — ''Banana Jones''<br />
<br />
"Hey Mister! Why not use reactive-banana as a smartphone app to brush your teeth?" — ''Tommy "Banana" Johnson''<br />
<br />
== Documentation ==<br />
* <span id="documentation">Documentation</span><br />
** '''[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)]'''<br />
** [[FRP explanation using reactive-banana | Unofficial tutorial on the Haskell wiki]]<br />
** '''[http://hackage.haskell.org/package/reactive-banana API reference]'''<br />
** '''[[/Examples/]]'''<br />
** [http://apfelmus.nfshost.com/blog.html#functional-reactive-programming-frp Developer Blog]<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus]<br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/reactive-banana/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=reactive-programming+haskell+frp+reactive-banana Ask on StackOverflow!]<br />
** More questions? [mailto:apfelmus%20at%20quantentunnel%20de Email] or [https://hackhands.com/apfelmus live help]!<br />
<br />
== Downloads and Source Code ==<br />
* Download and installation from Hackage<br />
** {{HackagePackage|id=reactive-banana}} - the FRP library itself<br />
** {{HackagePackage|id=reactive-banana-sdl}} - binding to the [[SDL]] library<br />
** {{HackagePackage|id=reactive-banana-wx}} - binding to the [[wxHaskell]] GUI library<br />
<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/master/reactive-banana reactive-banana] master branch<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/master/reactive-banana-wx reactive-banana-wx] master branch<br />
<br />
== External Links ==<br />
* [https://github.com/bernstein/breakout breakout], a small game<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:User interfaces]]<br />
[[Category:Libraries]]<br />
[[Category:wxHaskell]]<br />
[[Category:Packages]]<br />
[[Category:Robotics]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Reactive-banana&diff=60301Reactive-banana2015-10-29T18:01:41Z<p>Apfelmus: /* Releases and Resources */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:left;"><br />
[[Image:Reactive-Banana-banana.png|Reactive banana displaying trigger-happy <code>Behavior</code>.]]</div><br />
''Reactive-banana'' is a library for [[Functional Reactive Programming]] (FRP).<br />
<br />
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.<br />
<br />
The goal of the library is to provide a solid foundation.<br />
* 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.<br />
* The library features an '''efficient implementation'''. No more spooky time leaks, predicting space & time usage should be straightforward.<br />
* A plethora of '''[[#documentation|example code]]''' helps with getting started.<br />
<br />
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.<br />
<br />
[[#feedback|Feedback]] is welcome, I want to hear from you!<br />
<br />
== Status ==<br />
<br />
Current development focuses on performance. Applications to GUI programming are explored in the sister project [[Threepenny-gui|threepenny-gui]].<br />
<br />
* 29 October 2015: reactive-banana 1.0.0.0 released. Milestone.<br />
* 27 August 2015: reactive-banana 0.9.0.0 released.<br />
* 29 January 2014: reactive-banana 0.8.0.0 released.<br />
<!--<br />
* 21 November 2013: reactive-threepenny-gui deprecated again, because [[Threepenny-gui|threepenny-gui]] now has its own FRP subsystem built-in.<br />
* 02 August 2013: Initial release of reactive-banana-threepenny. Binds to the threepenny-gui GUI library.<br />
* 26 August 2012: reactive-banana 0.7.0.0 released. Features dynamic event switching.<br />
* 15 May 2012: reactive-banana 0.6.0.0 released.<br />
* 25 March 2012: reactive-banana 0.5.0.0 released.<br />
* 24 October 2011: reactive-banana 0.4.3.0 released.<br />
* 26 September 2011: Added some more examples, reactive-banana 0.4.2.0 released.<br />
* 14 July 2011: Implemented many examples, reactive-banana 0.4.1.0 released.<br />
* 22 June 2011: reactive-banana 0.3.0.0 released<br />
* 28 April 2011: reactive-banana 0.2.0.0 released<br />
--><br />
<br />
== Fake Testimonials ==<br />
<br />
"In the programming-language world, one rule of survival is simple: dance or die. This library makes dancing easy." – ''Simon Banana Jones''<br />
<br />
"About the use of language: it is impossible to sharpen a pencil with a blunt axe. You should try reactive-banana instead." — ''Event Dijkstra''<br />
<br />
"When I need a <code>bullet</code> event, I can just trigger it." — ''Billy the Reactive Banana''<br />
<br />
"This should be in a museum!" — ''Banana Jones''<br />
<br />
"Hey Mister! Why not use reactive-banana as a smartphone app to brush your teeth?" — ''Tommy "Banana" Johnson''<br />
<br />
== Documentation ==<br />
* <span id="documentation">Documentation</span><br />
** '''[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)]'''<br />
** [[FRP explanation using reactive-banana | Unofficial tutorial on the Haskell wiki]]<br />
** [http://hackage.haskell.org/package/reactive-banana API reference]<br />
** '''[[/Examples/]]'''<br />
** [http://apfelmus.nfshost.com/blog.html#functional-reactive-programming-frp Developer Blog]<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus]<br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/reactive-banana/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=reactive-programming+haskell+frp+reactive-banana Ask on StackOverflow!]<br />
** More questions? [mailto:apfelmus%20at%20quantentunnel%20de Email] or [https://hackhands.com/apfelmus live help]!<br />
<br />
== Downloads and Source Code ==<br />
* Download and installation from Hackage<br />
** {{HackagePackage|id=reactive-banana}} - the FRP library itself<br />
** {{HackagePackage|id=reactive-banana-sdl}} - binding to the [[SDL]] library<br />
** {{HackagePackage|id=reactive-banana-wx}} - binding to the [[wxHaskell]] GUI library<br />
<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/master/reactive-banana reactive-banana] master branch<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/master/reactive-banana-wx reactive-banana-wx] master branch<br />
<br />
== External Links ==<br />
* [https://github.com/bernstein/breakout breakout], a small game<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:User interfaces]]<br />
[[Category:Libraries]]<br />
[[Category:wxHaskell]]<br />
[[Category:Packages]]<br />
[[Category:Robotics]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Reactive-banana&diff=60300Reactive-banana2015-10-29T18:00:44Z<p>Apfelmus: /* What is it? */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:left;"><br />
[[Image:Reactive-Banana-banana.png|Reactive banana displaying trigger-happy <code>Behavior</code>.]]</div><br />
''Reactive-banana'' is a library for [[Functional Reactive Programming]] (FRP).<br />
<br />
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.<br />
<br />
The goal of the library is to provide a solid foundation.<br />
* 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.<br />
* The library features an '''efficient implementation'''. No more spooky time leaks, predicting space & time usage should be straightforward.<br />
* A plethora of '''[[#documentation|example code]]''' helps with getting started.<br />
<br />
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.<br />
<br />
[[#feedback|Feedback]] is welcome, I want to hear from you!<br />
<br />
== Status ==<br />
<br />
Current development focuses on performance. Applications to GUI programming are explored in the sister project [[Threepenny-gui|threepenny-gui]].<br />
<br />
* 29 October 2015: reactive-banana 1.0.0.0 released. Milestone.<br />
* 27 August 2015: reactive-banana 0.9.0.0 released.<br />
* 29 January 2014: reactive-banana 0.8.0.0 released.<br />
<!--<br />
* 21 November 2013: reactive-threepenny-gui deprecated again, because [[Threepenny-gui|threepenny-gui]] now has its own FRP subsystem built-in.<br />
* 02 August 2013: Initial release of reactive-banana-threepenny. Binds to the threepenny-gui GUI library.<br />
* 26 August 2012: reactive-banana 0.7.0.0 released. Features dynamic event switching.<br />
* 15 May 2012: reactive-banana 0.6.0.0 released.<br />
* 25 March 2012: reactive-banana 0.5.0.0 released.<br />
* 24 October 2011: reactive-banana 0.4.3.0 released.<br />
* 26 September 2011: Added some more examples, reactive-banana 0.4.2.0 released.<br />
* 14 July 2011: Implemented many examples, reactive-banana 0.4.1.0 released.<br />
* 22 June 2011: reactive-banana 0.3.0.0 released<br />
* 28 April 2011: reactive-banana 0.2.0.0 released<br />
--><br />
<br />
== Fake Testimonials ==<br />
<br />
"In the programming-language world, one rule of survival is simple: dance or die. This library makes dancing easy." – ''Simon Banana Jones''<br />
<br />
"About the use of language: it is impossible to sharpen a pencil with a blunt axe. You should try reactive-banana instead." — ''Event Dijkstra''<br />
<br />
"When I need a <code>bullet</code> event, I can just trigger it." — ''Billy the Reactive Banana''<br />
<br />
"This should be in a museum!" — ''Banana Jones''<br />
<br />
"Hey Mister! Why not use reactive-banana as a smartphone app to brush your teeth?" — ''Tommy "Banana" Johnson''<br />
<br />
== Releases and Resources ==<br />
* Download and installation from Hackage<br />
** {{HackagePackage|id=reactive-banana}} - the FRP library itself<br />
** {{HackagePackage|id=reactive-banana-sdl}} - binding to the [[SDL]] library<br />
** {{HackagePackage|id=reactive-banana-wx}} - binding to the [[wxHaskell]] GUI library<br />
<br />
* <span id="documentation">Documentation</span><br />
** '''[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)]'''<br />
** [[FRP explanation using reactive-banana | Unofficial tutorial on the Haskell wiki]]<br />
** [http://hackage.haskell.org/package/reactive-banana API reference]<br />
** '''[[/Examples/]]'''<br />
** [http://apfelmus.nfshost.com/blog.html#functional-reactive-programming-frp Developer Blog]<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus]<br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/reactive-banana/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=reactive-programming+haskell+frp+reactive-banana Ask on StackOverflow!]<br />
** More questions? [mailto:apfelmus%20at%20quantentunnel%20de Email] or [https://hackhands.com/apfelmus live help]!<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/master/reactive-banana reactive-banana] master branch<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/master/reactive-banana-wx reactive-banana-wx] master branch<br />
<br />
== External Links ==<br />
* [https://github.com/bernstein/breakout breakout], a small game<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:User interfaces]]<br />
[[Category:Libraries]]<br />
[[Category:wxHaskell]]<br />
[[Category:Packages]]<br />
[[Category:Robotics]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Reactive-banana&diff=60299Reactive-banana2015-10-29T18:00:14Z<p>Apfelmus: /* Status */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:left;"><br />
[[Image:Reactive-Banana-banana.png|Reactive banana displaying trigger-happy <code>Behavior</code>.]]</div><br />
''Reactive-banana'' is a library for [[Functional Reactive Programming]] (FRP).<br />
<br />
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.<br />
<br />
The goal of the library is to provide a solid foundation.<br />
* 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.<br />
* The library features an '''efficient implementation'''. No more spooky time leaks, predicting space & time usage should be straightforward.<br />
* A plethora of [[#documentation|example code]] helps with getting started.<br />
<br />
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.<br />
<br />
[[#feedback|Feedback]] is welcome, I want to hear from you!<br />
<br />
== Status ==<br />
<br />
Current development focuses on performance. Applications to GUI programming are explored in the sister project [[Threepenny-gui|threepenny-gui]].<br />
<br />
* 29 October 2015: reactive-banana 1.0.0.0 released. Milestone.<br />
* 27 August 2015: reactive-banana 0.9.0.0 released.<br />
* 29 January 2014: reactive-banana 0.8.0.0 released.<br />
<!--<br />
* 21 November 2013: reactive-threepenny-gui deprecated again, because [[Threepenny-gui|threepenny-gui]] now has its own FRP subsystem built-in.<br />
* 02 August 2013: Initial release of reactive-banana-threepenny. Binds to the threepenny-gui GUI library.<br />
* 26 August 2012: reactive-banana 0.7.0.0 released. Features dynamic event switching.<br />
* 15 May 2012: reactive-banana 0.6.0.0 released.<br />
* 25 March 2012: reactive-banana 0.5.0.0 released.<br />
* 24 October 2011: reactive-banana 0.4.3.0 released.<br />
* 26 September 2011: Added some more examples, reactive-banana 0.4.2.0 released.<br />
* 14 July 2011: Implemented many examples, reactive-banana 0.4.1.0 released.<br />
* 22 June 2011: reactive-banana 0.3.0.0 released<br />
* 28 April 2011: reactive-banana 0.2.0.0 released<br />
--><br />
<br />
== Fake Testimonials ==<br />
<br />
"In the programming-language world, one rule of survival is simple: dance or die. This library makes dancing easy." – ''Simon Banana Jones''<br />
<br />
"About the use of language: it is impossible to sharpen a pencil with a blunt axe. You should try reactive-banana instead." — ''Event Dijkstra''<br />
<br />
"When I need a <code>bullet</code> event, I can just trigger it." — ''Billy the Reactive Banana''<br />
<br />
"This should be in a museum!" — ''Banana Jones''<br />
<br />
"Hey Mister! Why not use reactive-banana as a smartphone app to brush your teeth?" — ''Tommy "Banana" Johnson''<br />
<br />
== Releases and Resources ==<br />
* Download and installation from Hackage<br />
** {{HackagePackage|id=reactive-banana}} - the FRP library itself<br />
** {{HackagePackage|id=reactive-banana-sdl}} - binding to the [[SDL]] library<br />
** {{HackagePackage|id=reactive-banana-wx}} - binding to the [[wxHaskell]] GUI library<br />
<br />
* <span id="documentation">Documentation</span><br />
** '''[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)]'''<br />
** [[FRP explanation using reactive-banana | Unofficial tutorial on the Haskell wiki]]<br />
** [http://hackage.haskell.org/package/reactive-banana API reference]<br />
** '''[[/Examples/]]'''<br />
** [http://apfelmus.nfshost.com/blog.html#functional-reactive-programming-frp Developer Blog]<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus]<br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/reactive-banana/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=reactive-programming+haskell+frp+reactive-banana Ask on StackOverflow!]<br />
** More questions? [mailto:apfelmus%20at%20quantentunnel%20de Email] or [https://hackhands.com/apfelmus live help]!<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/master/reactive-banana reactive-banana] master branch<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/master/reactive-banana-wx reactive-banana-wx] master branch<br />
<br />
== External Links ==<br />
* [https://github.com/bernstein/breakout breakout], a small game<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:User interfaces]]<br />
[[Category:Libraries]]<br />
[[Category:wxHaskell]]<br />
[[Category:Packages]]<br />
[[Category:Robotics]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Reactive-banana&diff=60296Reactive-banana2015-10-29T11:29:59Z<p>Apfelmus: /* Status */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:left;"><br />
[[Image:Reactive-Banana-banana.png|Reactive banana displaying trigger-happy <code>Behavior</code>.]]</div><br />
''Reactive-banana'' is a library for [[Functional Reactive Programming]] (FRP).<br />
<br />
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.<br />
<br />
The goal of the library is to provide a solid foundation.<br />
* 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.<br />
* The library features an '''efficient implementation'''. No more spooky time leaks, predicting space & time usage should be straightforward.<br />
* A plethora of [[#documentation|example code]] helps with getting started.<br />
<br />
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.<br />
<br />
[[#feedback|Feedback]] is welcome, I want to hear from you!<br />
<br />
== Status ==<br />
<br />
Current development focuses on performance. Applications to GUI programming are explored in the sister project [[Threepenny-gui|threepenny-gui]].<br />
<br />
* 29 October 2015: reactive-banana 1.0.0.0 released. Milestone.<br />
* 27 August 2015: reactive-banana 0.9.0.0 released.<br />
* 29 January 2014: reactive-banana 0.8.0.0 released.<br />
* 21 November 2013: reactive-threepenny-gui deprecated again, because [[Threepenny-gui|threepenny-gui]] now has its own FRP subsystem built-in.<br />
* 02 August 2013: Initial release of reactive-banana-threepenny. Binds to the threepenny-gui GUI library.<br />
* 26 August 2012: reactive-banana 0.7.0.0 released. Features dynamic event switching.<br />
* 15 May 2012: reactive-banana 0.6.0.0 released.<br />
* 25 March 2012: reactive-banana 0.5.0.0 released.<br />
* 24 October 2011: reactive-banana 0.4.3.0 released.<br />
* 26 September 2011: Added some more examples, reactive-banana 0.4.2.0 released.<br />
* 14 July 2011: Implemented many examples, reactive-banana 0.4.1.0 released.<br />
* 22 June 2011: reactive-banana 0.3.0.0 released<br />
* 28 April 2011: reactive-banana 0.2.0.0 released<br />
<br />
== Fake Testimonials ==<br />
<br />
"In the programming-language world, one rule of survival is simple: dance or die. This library makes dancing easy." – ''Simon Banana Jones''<br />
<br />
"About the use of language: it is impossible to sharpen a pencil with a blunt axe. You should try reactive-banana instead." — ''Event Dijkstra''<br />
<br />
"When I need a <code>bullet</code> event, I can just trigger it." — ''Billy the Reactive Banana''<br />
<br />
"This should be in a museum!" — ''Banana Jones''<br />
<br />
"Hey Mister! Why not use reactive-banana as a smartphone app to brush your teeth?" — ''Tommy "Banana" Johnson''<br />
<br />
== Releases and Resources ==<br />
* Download and installation from Hackage<br />
** {{HackagePackage|id=reactive-banana}} - the FRP library itself<br />
** {{HackagePackage|id=reactive-banana-sdl}} - binding to the [[SDL]] library<br />
** {{HackagePackage|id=reactive-banana-wx}} - binding to the [[wxHaskell]] GUI library<br />
<br />
* <span id="documentation">Documentation</span><br />
** '''[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)]'''<br />
** [[FRP explanation using reactive-banana | Unofficial tutorial on the Haskell wiki]]<br />
** [http://hackage.haskell.org/package/reactive-banana API reference]<br />
** '''[[/Examples/]]'''<br />
** [http://apfelmus.nfshost.com/blog.html#functional-reactive-programming-frp Developer Blog]<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus]<br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/reactive-banana/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=reactive-programming+haskell+frp+reactive-banana Ask on StackOverflow!]<br />
** More questions? [mailto:apfelmus%20at%20quantentunnel%20de Email] or [https://hackhands.com/apfelmus live help]!<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/develop/reactive-banana reactive-banana] development branch<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/master/reactive-banana-wx reactive-banana-wx] master branch<br />
<br />
== External Links ==<br />
* [https://github.com/bernstein/breakout breakout], a small game<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:User interfaces]]<br />
[[Category:Libraries]]<br />
[[Category:wxHaskell]]<br />
[[Category:Packages]]<br />
[[Category:Robotics]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Reactive-banana&diff=60295Reactive-banana2015-10-29T11:28:08Z<p>Apfelmus: /* What is it? */ Add links to dogfood</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:left;"><br />
[[Image:Reactive-Banana-banana.png|Reactive banana displaying trigger-happy <code>Behavior</code>.]]</div><br />
''Reactive-banana'' is a library for [[Functional Reactive Programming]] (FRP).<br />
<br />
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.<br />
<br />
The goal of the library is to provide a solid foundation.<br />
* 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.<br />
* The library features an '''efficient implementation'''. No more spooky time leaks, predicting space & time usage should be straightforward.<br />
* A plethora of [[#documentation|example code]] helps with getting started.<br />
<br />
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.<br />
<br />
[[#feedback|Feedback]] is welcome, I want to hear from you!<br />
<br />
== Status ==<br />
<br />
Current development focuses on performance. Applications to GUI programming are explored in the sister project [[Threepenny-gui|threepenny-gui]].<br />
<br />
* 27 August 2015: reactive-banana 0.9.0.0 released.<br />
* 29 January 2014: reactive-banana 0.8.0.0 released.<br />
* 21 November 2013: reactive-threepenny-gui deprecated again, because [[Threepenny-gui|threepenny-gui]] now has its own FRP subsystem built-in.<br />
* 02 August 2013: Initial release of reactive-banana-threepenny. Binds to the threepenny-gui GUI library.<br />
* 26 August 2012: reactive-banana 0.7.0.0 released. Features dynamic event switching.<br />
* 15 May 2012: reactive-banana 0.6.0.0 released.<br />
* 25 March 2012: reactive-banana 0.5.0.0 released.<br />
* 24 October 2011: reactive-banana 0.4.3.0 released.<br />
* 26 September 2011: Added some more examples, reactive-banana 0.4.2.0 released.<br />
* 14 July 2011: Implemented many examples, reactive-banana 0.4.1.0 released.<br />
* 22 June 2011: reactive-banana 0.3.0.0 released<br />
* 28 April 2011: reactive-banana 0.2.0.0 released<br />
<br />
== Fake Testimonials ==<br />
<br />
"In the programming-language world, one rule of survival is simple: dance or die. This library makes dancing easy." – ''Simon Banana Jones''<br />
<br />
"About the use of language: it is impossible to sharpen a pencil with a blunt axe. You should try reactive-banana instead." — ''Event Dijkstra''<br />
<br />
"When I need a <code>bullet</code> event, I can just trigger it." — ''Billy the Reactive Banana''<br />
<br />
"This should be in a museum!" — ''Banana Jones''<br />
<br />
"Hey Mister! Why not use reactive-banana as a smartphone app to brush your teeth?" — ''Tommy "Banana" Johnson''<br />
<br />
== Releases and Resources ==<br />
* Download and installation from Hackage<br />
** {{HackagePackage|id=reactive-banana}} - the FRP library itself<br />
** {{HackagePackage|id=reactive-banana-sdl}} - binding to the [[SDL]] library<br />
** {{HackagePackage|id=reactive-banana-wx}} - binding to the [[wxHaskell]] GUI library<br />
<br />
* <span id="documentation">Documentation</span><br />
** '''[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)]'''<br />
** [[FRP explanation using reactive-banana | Unofficial tutorial on the Haskell wiki]]<br />
** [http://hackage.haskell.org/package/reactive-banana API reference]<br />
** '''[[/Examples/]]'''<br />
** [http://apfelmus.nfshost.com/blog.html#functional-reactive-programming-frp Developer Blog]<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus]<br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/reactive-banana/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=reactive-programming+haskell+frp+reactive-banana Ask on StackOverflow!]<br />
** More questions? [mailto:apfelmus%20at%20quantentunnel%20de Email] or [https://hackhands.com/apfelmus live help]!<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/develop/reactive-banana reactive-banana] development branch<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/master/reactive-banana-wx reactive-banana-wx] master branch<br />
<br />
== External Links ==<br />
* [https://github.com/bernstein/breakout breakout], a small game<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:User interfaces]]<br />
[[Category:Libraries]]<br />
[[Category:wxHaskell]]<br />
[[Category:Packages]]<br />
[[Category:Robotics]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Reactive-banana&diff=60021Reactive-banana2015-08-29T08:08:34Z<p>Apfelmus: /* Status */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:left;"><br />
[[Image:Reactive-Banana-banana.png|Reactive banana displaying trigger-happy <code>Behavior</code>.]]</div><br />
''Reactive-banana'' is a library for [[Functional Reactive Programming]] (FRP).<br />
<br />
FRP offers an elegant and concise way to express interactive programs such as graphical 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.<br />
<br />
The goal of the library is to provide a solid foundation.<br />
* 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.<br />
* The library features an '''efficient implementation'''. No more spooky time leaks, predicting space & time usage should be straightforward.<br />
* A plethora of [[#documentation|example code]] helps with getting started.<br />
<br />
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.<br />
<br />
[[#feedback|Feedback]] is welcome, I want to hear from you!<br />
<br />
== Status ==<br />
<br />
Current development focuses on performance. Applications to GUI programming are explored in the sister project [[Threepenny-gui|threepenny-gui]].<br />
<br />
* 27 August 2015: reactive-banana 0.9.0.0 released.<br />
* 29 January 2014: reactive-banana 0.8.0.0 released.<br />
* 21 November 2013: reactive-threepenny-gui deprecated again, because [[Threepenny-gui|threepenny-gui]] now has its own FRP subsystem built-in.<br />
* 02 August 2013: Initial release of reactive-banana-threepenny. Binds to the threepenny-gui GUI library.<br />
* 26 August 2012: reactive-banana 0.7.0.0 released. Features dynamic event switching.<br />
* 15 May 2012: reactive-banana 0.6.0.0 released.<br />
* 25 March 2012: reactive-banana 0.5.0.0 released.<br />
* 24 October 2011: reactive-banana 0.4.3.0 released.<br />
* 26 September 2011: Added some more examples, reactive-banana 0.4.2.0 released.<br />
* 14 July 2011: Implemented many examples, reactive-banana 0.4.1.0 released.<br />
* 22 June 2011: reactive-banana 0.3.0.0 released<br />
* 28 April 2011: reactive-banana 0.2.0.0 released<br />
<br />
== Fake Testimonials ==<br />
<br />
"In the programming-language world, one rule of survival is simple: dance or die. This library makes dancing easy." – ''Simon Banana Jones''<br />
<br />
"About the use of language: it is impossible to sharpen a pencil with a blunt axe. You should try reactive-banana instead." — ''Event Dijkstra''<br />
<br />
"When I need a <code>bullet</code> event, I can just trigger it." — ''Billy the Reactive Banana''<br />
<br />
"This should be in a museum!" — ''Banana Jones''<br />
<br />
"Hey Mister! Why not use reactive-banana as a smartphone app to brush your teeth?" — ''Tommy "Banana" Johnson''<br />
<br />
== Releases and Resources ==<br />
* Download and installation from Hackage<br />
** {{HackagePackage|id=reactive-banana}} - the FRP library itself<br />
** {{HackagePackage|id=reactive-banana-sdl}} - binding to the [[SDL]] library<br />
** {{HackagePackage|id=reactive-banana-wx}} - binding to the [[wxHaskell]] GUI library<br />
<br />
* <span id="documentation">Documentation</span><br />
** '''[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)]'''<br />
** [[FRP explanation using reactive-banana | Unofficial tutorial on the Haskell wiki]]<br />
** [http://hackage.haskell.org/package/reactive-banana API reference]<br />
** '''[[/Examples/]]'''<br />
** [http://apfelmus.nfshost.com/blog.html#functional-reactive-programming-frp Developer Blog]<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus]<br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/reactive-banana/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=reactive-programming+haskell+frp+reactive-banana Ask on StackOverflow!]<br />
** More questions? [mailto:apfelmus%20at%20quantentunnel%20de Email] or [https://hackhands.com/apfelmus live help]!<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/develop/reactive-banana reactive-banana] development branch<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/master/reactive-banana-wx reactive-banana-wx] master branch<br />
<br />
== External Links ==<br />
* [https://github.com/bernstein/breakout breakout], a small game<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:User interfaces]]<br />
[[Category:Libraries]]<br />
[[Category:wxHaskell]]<br />
[[Category:Packages]]<br />
[[Category:Robotics]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Reactive-banana&diff=59829Reactive-banana2015-05-31T11:22:05Z<p>Apfelmus: /* What is it? */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:left;"><br />
[[Image:Reactive-Banana-banana.png|Reactive banana displaying trigger-happy <code>Behavior</code>.]]</div><br />
''Reactive-banana'' is a library for [[Functional Reactive Programming]] (FRP).<br />
<br />
FRP offers an elegant and concise way to express interactive programs such as graphical 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.<br />
<br />
The goal of the library is to provide a solid foundation.<br />
* 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.<br />
* The library features an '''efficient implementation'''. No more spooky time leaks, predicting space & time usage should be straightforward.<br />
* A plethora of [[#documentation|example code]] helps with getting started.<br />
<br />
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.<br />
<br />
[[#feedback|Feedback]] is welcome, I want to hear from you!<br />
<br />
== Status ==<br />
<br />
Current development focuses on performance. Applications to GUI programming are explored in the sister project [[Threepenny-gui|threepenny-gui]].<br />
<br />
* 29 January 2014: reactive-banana 0.8.0.0 released.<br />
* 21 November 2013: reactive-threepenny-gui deprecated again, because [[Threepenny-gui|threepenny-gui]] now has its own FRP subsystem built-in.<br />
* 02 August 2013: Initial release of reactive-banana-threepenny. Binds to the threepenny-gui GUI library.<br />
* 26 August 2012: reactive-banana 0.7.0.0 released. Features dynamic event switching.<br />
* 15 May 2012: reactive-banana 0.6.0.0 released.<br />
* 25 March 2012: reactive-banana 0.5.0.0 released.<br />
* 24 October 2011: reactive-banana 0.4.3.0 released.<br />
* 26 September 2011: Added some more examples, reactive-banana 0.4.2.0 released.<br />
* 14 July 2011: Implemented many examples, reactive-banana 0.4.1.0 released.<br />
* 22 June 2011: reactive-banana 0.3.0.0 released<br />
* 28 April 2011: reactive-banana 0.2.0.0 released<br />
== Fake Testimonials ==<br />
<br />
"In the programming-language world, one rule of survival is simple: dance or die. This library makes dancing easy." – ''Simon Banana Jones''<br />
<br />
"About the use of language: it is impossible to sharpen a pencil with a blunt axe. You should try reactive-banana instead." — ''Event Dijkstra''<br />
<br />
"When I need a <code>bullet</code> event, I can just trigger it." — ''Billy the Reactive Banana''<br />
<br />
"This should be in a museum!" — ''Banana Jones''<br />
<br />
"Hey Mister! Why not use reactive-banana as a smartphone app to brush your teeth?" — ''Tommy "Banana" Johnson''<br />
<br />
== Releases and Resources ==<br />
* Download and installation from Hackage<br />
** {{HackagePackage|id=reactive-banana}} - the FRP library itself<br />
** {{HackagePackage|id=reactive-banana-sdl}} - binding to the [[SDL]] library<br />
** {{HackagePackage|id=reactive-banana-wx}} - binding to the [[wxHaskell]] GUI library<br />
<br />
* <span id="documentation">Documentation</span><br />
** '''[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)]'''<br />
** [[FRP explanation using reactive-banana | Unofficial tutorial on the Haskell wiki]]<br />
** [http://hackage.haskell.org/package/reactive-banana API reference]<br />
** '''[[/Examples/]]'''<br />
** [http://apfelmus.nfshost.com/blog.html#functional-reactive-programming-frp Developer Blog]<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus]<br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/reactive-banana/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=reactive-programming+haskell+frp+reactive-banana Ask on StackOverflow!]<br />
** More questions? [mailto:apfelmus%20at%20quantentunnel%20de Email] or [https://hackhands.com/apfelmus live help]!<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/develop/reactive-banana reactive-banana] development branch<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/master/reactive-banana-wx reactive-banana-wx] master branch<br />
<br />
== External Links ==<br />
* [https://github.com/bernstein/breakout breakout], a small game<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:User interfaces]]<br />
[[Category:Libraries]]<br />
[[Category:wxHaskell]]<br />
[[Category:Packages]]<br />
[[Category:Robotics]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Threepenny-gui&diff=59732Threepenny-gui2015-05-14T15:17:30Z<p>Apfelmus: /* What is it? */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:right; width:16em; font-size:90%; font-family:serif; border:1px solid grey; padding:1ex;"><br />
<div><br />
Und der Haifisch, der hat Zähne<br><br />
Und die trägt er im Gesicht<br><br />
Und Macheath, der hat ein Messer<br><br />
Doch das Messer sieht man nicht.<br><br />
</div><br />
Bertold Brecht - ''The Threepenny Opera''<br />
</div><br />
''Threepenny-gui'' is a GUI framework that uses the web browser as a display.<br />
<br />
Features include:<br />
* '''Easy installation.''' Everyone has a reasonably modern web browser installed. Just install the library from hackage and you are ready to go. The library is cross-platform.<br />
* '''HTML''' + '''JavaScript'''. You have all capabilities of HTML at your disposal when creating user interfaces. This is a blessing, but it can also be a curse, so the library includes a few layout combinators to quickly create user interfaces without the need to deal with the mess that is CSS. A foreign function interface (FFI) allows you to execute JavaScript code in the browser.<br />
* [[Functional Reactive Programming]] ('''FRP''') promises to eliminate the spaghetti code that you usually get when using the traditional imperative event-based style for programming user interactions. Threepenny has an FRP library built-in, but its use is completely optional. Employ FRP when it is convenient and fall back to the traditional style when you hit an impasse.<br />
<br />
== What is it not? ==<br />
<br />
As cool as Threepenny may be, it is ...<br />
<br />
* ... not a web front-end. The server is meant to be run from localhost. Latency would be too high to use it as a web app. That said, it's perfectly stuitable for implementing multi-user apps on a local network, see the [https://github.com/HeinrichApfelmus/threepenny-gui/blob/master/samples/Chat.hs Chat.hs example].<br />
* ... not a JavaScript or HTML library. It's a GUI framework with a Haskell API and abstracts many aspects of the document object model. While some basic HTML skills are needed, no knowledge of JavaScript is required to use Threepenny, though you can include external client libraries if you really want to.<br />
<br />
If you want to write a web app, have a look at projects like [https://github.com/faylang/fay/wiki Fay], [https://github.com/ghcjs/ghcjs GHCJS] and [https://github.com/valderman/haste-compiler Haste]. That said, the Threepenny API may be ported to some of these projects as well in the future, but that is not the focus right now.<br />
<br />
== Status ==<br />
<br />
The library is still very much in flux, significant API changes are likely in future versions. The goal is make GUI programming as simple as possible, and that just needs some experimentation.<br />
<br />
* 3 May 2016 — Release of threepenny-gui-0.6.0.1<br />
* 4 October 2014 — Release of threepenny-gui-0.5.0.0<br />
* 21 November 2013 — Release of threepenny-gui-0.4.0.0<br />
* 7 September 2013 — Release of threepenny-gui-0.3.0.0<br />
<br />
== Gallery ==<br />
<br />
Applications written with Threepenny.<br />
<br />
<table><br />
<tr><br />
<td><br />
[http://fluffynukeit.com/?page_id=535 Daniel Austin's ''FNIStash'']<br />
<br>Editor for [http://en.wikipedia.org/wiki/Torchlight_II Torchlight 2] inventories.<br />
<br>[[Image:Threepenny-gui-fnistash.png|x300px]]<br />
<td><br />
[https://bitbucket.org/duplode/stunts-cartography Daniel Mlot's ''Stunts Cartography Track Viewer'']<br />
<br>Map viewer for the [http://scr.stunts.hu/ Stunts] racing game.<br />
<br>[[Image:Threepenny-gui-stunts.png|x300px]]<br />
<tr><br />
<td><br />
[https://github.com/CarstenKoenig/Holidays2013 Carsten König's holiday project]<br />
<br>Small viewer for the Mandelbrot set.<br />
<br>[[Image:Threepenny-gui-mandelbrot.png|300px]]<br />
<td><br />
[https://github.com/Chaddai/CurveProject Chaddai's ''CurveProject'']<br />
<br>Plotting curves for math teachers.<br />
<br>[[Image:Threepenny-gui-curveproject.jpg|386px]]<br />
</table><br />
<br />
== Releases and Resources ==<br />
* Download on Hackage<br />
** {{HackagePackage|id=threepenny-gui}}<br />
* <span id="documentation">Documentation</span><br />
** [http://hackage.haskell.org/package/threepenny-gui API reference]<br />
** '''[https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/samples#readme Examples]'''<br />
** [http://apfelmus.nfshost.com/blog.html#gui-programming Developer Blog]<br />
** [https://github.com/yuvallanger/threepenny-gui/blob/tutorial/samples/BarTab.lhs A work in progress tutorial] by [https://github.com/yuvallanger Yuval Langer] - help will be dearly appreciated.<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus]<br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/threepenny-gui/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=haskell+threepenny-gui+gui Ask on StackOverflow!]<br />
** More questions? [mailto:apfelmus%20at%20quantentunnel%20de Email] or [https://hackhands.com/apfelmus live help]!<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/ threepenny-gui] master branch<br />
<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:Libraries]]<br />
[[Category:Packages]]<br />
[[Category:User interfaces]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Threepenny-gui&diff=59711Threepenny-gui2015-05-03T15:25:14Z<p>Apfelmus: /* Status */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:right; width:16em; font-size:90%; font-family:serif; border:1px solid grey; padding:1ex;"><br />
<div><br />
Und der Haifisch, der hat Zähne<br><br />
Und die trägt er im Gesicht<br><br />
Und Macheath, der hat ein Messer<br><br />
Doch das Messer sieht man nicht.<br><br />
</div><br />
Bertold Brecht - ''The Threepenny Opera''<br />
</div><br />
''Threepenny-gui'' is a GUI framework that uses the web browser as a display.<br />
<br />
Features include:<br />
* '''Easy installation.''' Everyone has a reasonably modern web browser installed. Just install the library from hackage and you are ready to go. The library is cross-platform.<br />
* '''HTML'''. You have all capabilities of HTML at your disposal when creating user interfaces. This is a blessing, but it can also be a curse, so the library includes a few layout combinators to quickly create user interfaces without the need to deal with the mess that is CSS. A small foreign function interface (FFI) for JavaScript allows you to include JS client libraries.<br />
* [[Functional Reactive Programming]] ('''FRP''') promises to eliminate the spaghetti code that you usually get when using the traditional imperative event-based style for programming user interactions. Threepenny has an FRP library built-in, but its use is completely optional. Employ FRP when it is convenient and fall back to the traditional style when you hit an impasse.<br />
<br />
== What is it not? ==<br />
<br />
As cool as Threepenny may be, it is ...<br />
<br />
* ... not a web front-end. The server is meant to be run from localhost. Latency would be too high to use it as a web app. That said, it's perfectly stuitable for implementing multi-user apps on a local network, see the [https://github.com/HeinrichApfelmus/threepenny-gui/blob/master/samples/Chat.hs Chat.hs example].<br />
* ... not a JavaScript or HTML library. It's a GUI framework with a Haskell API and abstracts many aspects of the document object model. While some basic HTML skills are needed, no knowledge of JavaScript is required to use Threepenny, though you can include external client libraries if you really want to.<br />
<br />
If you want to write a web app, have a look at projects like [https://github.com/faylang/fay/wiki Fay], [https://github.com/ghcjs/ghcjs GHCJS] and [https://github.com/valderman/haste-compiler Haste]. That said, the Threepenny API may be ported to some of these projects as well in the future, but that is not the focus right now.<br />
<br />
== Status ==<br />
<br />
The library is still very much in flux, significant API changes are likely in future versions. The goal is make GUI programming as simple as possible, and that just needs some experimentation.<br />
<br />
* 3 May 2016 — Release of threepenny-gui-0.6.0.1<br />
* 4 October 2014 — Release of threepenny-gui-0.5.0.0<br />
* 21 November 2013 — Release of threepenny-gui-0.4.0.0<br />
* 7 September 2013 — Release of threepenny-gui-0.3.0.0<br />
<br />
== Gallery ==<br />
<br />
Applications written with Threepenny.<br />
<br />
<table><br />
<tr><br />
<td><br />
[http://fluffynukeit.com/?page_id=535 Daniel Austin's ''FNIStash'']<br />
<br>Editor for [http://en.wikipedia.org/wiki/Torchlight_II Torchlight 2] inventories.<br />
<br>[[Image:Threepenny-gui-fnistash.png|x300px]]<br />
<td><br />
[https://bitbucket.org/duplode/stunts-cartography Daniel Mlot's ''Stunts Cartography Track Viewer'']<br />
<br>Map viewer for the [http://scr.stunts.hu/ Stunts] racing game.<br />
<br>[[Image:Threepenny-gui-stunts.png|x300px]]<br />
<tr><br />
<td><br />
[https://github.com/CarstenKoenig/Holidays2013 Carsten König's holiday project]<br />
<br>Small viewer for the Mandelbrot set.<br />
<br>[[Image:Threepenny-gui-mandelbrot.png|300px]]<br />
<td><br />
[https://github.com/Chaddai/CurveProject Chaddai's ''CurveProject'']<br />
<br>Plotting curves for math teachers.<br />
<br>[[Image:Threepenny-gui-curveproject.jpg|386px]]<br />
</table><br />
<br />
== Releases and Resources ==<br />
* Download on Hackage<br />
** {{HackagePackage|id=threepenny-gui}}<br />
* <span id="documentation">Documentation</span><br />
** [http://hackage.haskell.org/package/threepenny-gui API reference]<br />
** '''[https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/samples#readme Examples]'''<br />
** [http://apfelmus.nfshost.com/blog.html#gui-programming Developer Blog]<br />
** [https://github.com/yuvallanger/threepenny-gui/blob/tutorial/samples/BarTab.lhs A work in progress tutorial] by [https://github.com/yuvallanger Yuval Langer] - help will be dearly appreciated.<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus]<br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/threepenny-gui/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=haskell+threepenny-gui+gui Ask on StackOverflow!]<br />
** More questions? [mailto:apfelmus%20at%20quantentunnel%20de Email] or [https://hackhands.com/apfelmus live help]!<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/ threepenny-gui] master branch<br />
<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:Libraries]]<br />
[[Category:Packages]]<br />
[[Category:User interfaces]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Performance&diff=59513Performance2015-03-10T10:23:23Z<p>Apfelmus: /* General techniques */</p>
<hr />
<div>{{Performance infobox}}<br />
Welcome to the '''Haskell Performance Resource''', the collected wisdom on how to make your Haskell programs go faster. <br />
<br />
== Introduction ==<br />
<br />
One question that often comes up is along the general lines of "Can I write this program in Haskell so that it performs as well as, or better than, the same program written in some other language?"<br />
<br />
This is a difficult question to answer in general because Haskell is a language, not an implementation. Performance can only be measured relative to a specific language implementation.<br />
<br />
Moreover, it's often not clear if two programs which supposedly have the same functionality really do the same thing. Different languages sometimes require very different ways of expressing the same intent. Certain types of bug are rare in typical Haskell programs that are more common in other languages and vice versa, due to strong typing, automatic memory management and lazy evaluation.<br />
<br />
Nonetheless, it is usually possible to write a Haskell program that performs as well as, or better than, the same program written in any other language. The main caveat is that you may have to modify your code significantly in order to improve its performance. Compilers such as GHC are good at eliminating layers of abstraction, but they aren't perfect, and often need some help. <br />
<br />
There are many non-invasive techniques: compiler options, for example. Then there are techniques that require adding some small amounts of performance cruft to your program: strictness annotations, for example. If you still don't get the best performance, though, it might be necessary to resort to larger refactorings.<br />
<br />
Sometimes the code tweaks required to get the best performance are non-portable, perhaps because they require language extensions that aren't implemented in all compilers (e.g. unboxing), or because they require using platform-specific features or libraries. This might not be acceptable in your setting.<br />
<br />
If the worst comes to the worst, you can always write your critical code in C and use the FFI to call it. Beware of the boundaries though - marshaling data across the FFI can be expensive, and multi-language memory management can be complex and error-prone. It's usually better to stick to Haskell if possible.<br />
<br />
== Basic techniques ==<br />
<br />
The key tool to use in making your Haskell program run faster is ''profiling''. Profiling is provided by [[GHC]] and [[nhc98]]. There is ''no substitute'' for finding where your program's time/space is ''really'' going, as opposed to where you imagine it is going.<br />
<br />
Another point to bear in mind: By far the best way to improve a program's performance ''dramatically'' is to use better algorithms. Once profiling has thrown the spotlight on the guilty time-consumer(s), it may be better to re-think your program than to try all the tweaks listed below.<br />
<br />
Another extremely efficient way to make your program snappy is to use library code that has been Seriously Tuned By Someone Else. You ''might'' be able to write a better sorting function than the one in <tt>Data.List</tt>, but it will take you much longer than typing <tt>import Data.List</tt>.<br />
<br />
We have chosen to organise the rest of this resource first by Haskell construct (data types, pattern matching, integers), and then within each category to describe techniques that apply across implementations, and also techniques that are specific to a certain Haskell implementation (e.g. GHC). There are some implementation-specific techniques that apply in general - those are linked from the [[Haskell Performance Resource#General_Implementation-Specific_Techniques | General Implementation-Specific Techniques]] section below.<br />
<br />
== Haskell constructs ==<br />
<br />
* [[/Data Types/]]<br />
* [[/Functions/]]<br />
* [[/Overloading/]]<br />
* [[/FFI/]]<br />
* [[/Arrays/]]<br />
* [[/Strings/]]<br />
* [[/Integers/]]<br />
* [[/IO | I/O ]]<br />
* [[/Floating Point/]]<br />
* [[/Concurrency/]]<br />
* [[/Modules/]]<br />
* [[/Monads/]]<br />
<br />
== General techniques ==<br />
<br />
The most important thing for a beginner to keep in mind is that Haskell programs are evaluated using [[lazy evaluation]], which has many advantages, but also drawbacks when it comes to performance. The rule of thumb is that if you really want to have explicit control over the evaluation, then you should try to avoid it.<br />
<br />
* [[/Strictness/]]<br />
* [[/Laziness/]]<br />
* [[/Space | Avoiding space leaks]]<br />
* [[/Accumulating parameter|Accumulating parameters]]<br />
* [[Stack_overflow|Avoiding stack overflow]]<br />
<br />
== Compiler specific techniques ==<br />
<br />
* [[/GHC/]]<br />
* [[/NHC98| nhc98]]<br />
* [[/Hugs/]]<br />
* [[/Yhc/]]<br />
* [[/JHC/]]<br />
<br />
== More information ==<br />
<br />
* [https://www.youtube.com/watch?v=McFNkLPTOSY&feature=youtu.be Dan Doel - Introduction to Low Level Haskell Optimization]; a video of Dan Doel's talk at the Boston Haskell Meetup, Sept 17, 2014 ([http://hub.darcs.net/dolio/optimization-talk-demo/browse/slides/slides.md slides]).<br />
* Don Stewart's [http://stackoverflow.com/questions/3276240/tools-for-analyzing-performance-of-a-haskell-program/3276557#3276557 Haskell performance overview] on StackOverflow (2013)<br />
* There are plenty of good examples of Haskell code written for performance in the [http://benchmarksgame.alioth.debian.org/ The Computer Language Benchmarks Game]<br />
* And many alternatives, with discussion, on this wiki: [[Benchmarks Game]] and on the [http://web.archive.org/web/20060209215702/http://haskell.org/hawiki/ShootoutEntry old Haskell wiki] (in the Web Archive)<br />
* There are ~100 [http://blog.johantibell.com/2010/09/slides-from-my-high-performance-haskell.html slides on High-Performance Haskell] from the 2010 CUFP tutorial on that topic.<br />
<br />
== Specific comparisons of data structures ==<br />
=== Data.Sequence vs. lists ===<br />
<br />
Data.Sequence has complexity O(log(min(i,n-i))) for access, insertion and update to position i of a sequence of length n.<br />
<br />
List has complexity O(i).<br />
<br />
List is a non-trivial constant-factor faster for operations at the head (cons and head), making it a more efficient choice for stack-like and stream-like access patterns. Data.Sequence is faster for every other access pattern, such as queue and random access.<br />
<br />
See the following program for proof:<br />
<haskell><br />
import Data.Sequence<br />
<br />
insert_million 0 sequence = sequence<br />
insert_million n sequence = insert_million (n - 1)(sequence |> n)<br />
<br />
main = print (Data.Sequence.length (insert_million 1000000 empty))<br />
</haskell><br />
<pre><br />
$ ghc -O2 --make InsertMillionElements.hs && time ./InsertMillionElements +RTS -K100M<br />
1000000<br />
real 0m7.238s<br />
user 0m6.804s<br />
sys 0m0.228s<br />
</pre><br />
<haskell><br />
insert_million 0 list = reverse list<br />
insert_million n list = insert_million (n -1) (n:list)<br />
<br />
main = print (length (insert_million 1000000 []))<br />
</haskell><br />
<pre><br />
$ ghc -O2 --make InsertMillionElements.hs && time ./InsertMillionElementsList +RTS -K100M<br />
1000000<br />
real 0m0.588s<br />
user 0m0.528s<br />
sys 0m0.052s<br />
</pre><br />
Lists are substantially faster on this micro-benchmark.<br />
<br />
A sequence uses between 5/6 and 4/3 times as much space as the equivalent list (assuming an overhead of one word per node, as in GHC).<br />
If only deque operations are used, the space usage will be near the lower end of the range, because all internal nodes will be ternary.<br />
Heavy use of split and append will result in sequences using approximately the same space as lists.<br />
In detail:<br />
* a list of length ''n'' consists of ''n'' cons nodes, each occupying 3 words.<br />
* a sequence of length ''n'' has approximately ''n''/(''k''-1) nodes, where ''k'' is the average arity of the internal nodes (each 2 or 3). There is a pointer, a size and overhead for each node, plus a pointer for each element, i.e. ''n''(3/(''k''-1) + 1) words.<br />
<br />
== Additional Tips ==<br />
<br />
* Use strict returns ( return $! ...) unless you absolutely need them lazy.<br />
* Profile, profile, profile - understand who is allocated the memory on your heap (+RTS -hc) and how it's being used (+RTS -hb).<br />
* Use +RTS -p to understand who's doing all the allocations and where your time is being spent.<br />
* Approach profiling like a science experiment - make one change, observe if anything is different, rollback and make another change - observe the change. Keep notes!<br />
* Use [[ThreadScope]] to visualize GHC eventlog traces.<br />
<br />
[[Category:Idioms]]<br />
[[Category:Language]]<br />
[[Category:Performance|*]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Lazy_vs._non-strict&diff=59512Lazy vs. non-strict2015-03-10T10:17:45Z<p>Apfelmus: /* Further references */</p>
<hr />
<div>Haskell is often described as a lazy language.<br />
However, the language specification simply states that Haskell is [[Non-strict semantics|non-strict]], which is not quite the same thing as [[lazy evaluation|lazy]].<br />
<br />
<br />
== Direction of evaluation ==<br />
<br />
[[Non-strict semantics|Non-strictness]] means that [[reduction]] (the mathematical term for [[evaluation]]) proceeds from the outside in, so if you have <hask>(a+(b*c))</hask> then first you reduce the <hask>+</hask>, then you reduce the inner <hask>(b*c)</hask>. Strict languages work the other way around, starting with the innermost brackets and working outwards.<br />
<br />
This matters to the semantics because if you have an expression that evaluates to [[bottom]] (i.e. an <hask>error</hask> or endless loop) then any language that starts at the inside and works outwards will always find that bottom value, and hence the bottom will propagate outwards. However if you start from the outside and work in then some of the sub-expressions are eliminated by the outer reductions, so they don't get evaluated and you don't get "bottom".<br />
<br />
[[Lazy evaluation]], on the other hand, means only evaluating an expression when its results are needed (note the shift from "reduction" to "evaluation"). So when the evaluation engine sees an expression it builds a [[thunk]] data structure containing whatever values are needed to evaluate the expression, plus a pointer to the expression itself. When the result is actually needed the evaluation engine calls the expression and then replaces the thunk with the result for future reference.<br />
<br />
Obviously there is a strong correspondence between a thunk and a partly-evaluated expression. Hence in most cases the terms "lazy" and "non-strict" are synonyms. But not quite. For instance you could imagine an evaluation engine on highly parallel hardware that fires off sub-expression evaluation eagerly, but then throws away results that are not needed.<br />
<br />
In practice Haskell is not a purely lazy language: for instance pattern matching is usually strict (So trying a pattern match forces evaluation to happen at least far enough to accept or reject the match. You can prepend a <hask>~</hask> in order to make pattern matches lazy). The [[strictness analyzer]] also looks for cases where sub-expressions are ''always'' required by the outer expression, and converts those into eager evaluation. It can do this because the semantics (in terms of "bottom") don't change. Programmers can also use the <hask>seq</hask> primitive to force an expression to evaluate regardless of whether the result will ever be used. <hask>$!</hask> is defined in terms of <hask>seq</hask>.<br />
<br />
<br />
Source:<br />
* Paul Johnson in Haskell Cafe [http://www.haskell.org/pipermail/haskell-cafe/2007-November/034814.html What is the role of $! ?]<br />
<br />
== WHNF ==<br />
<br />
WHNF is an abbreviation for [[weak head normal form]].<br />
<br />
<br />
== Further references ==<br />
[https://hackhands.com/non-strict-semantics-haskell Haskell’s Non-Strict Semantics – What Exactly does Lazy Evaluation Calculate?] – An introductory tutorial on the difference between lazy evaluation and non-strict semantics.<br />
<br />
Laziness is simply a common implementation technique for non-strict languages, but it is not the only possible technique. One major drawback with lazy implementations is that they are not generally amenable to parallelisation. This paper states that experiments indicate that little parallelism can be extracted from lazy programs:<br />
<br />
"The Impact of Laziness on Parallelism and the Limits of Strictness Analysis"<br />
(G. Tremblay G. R. Gao)<br />
http://citeseer.ist.psu.edu/tremblay95impact.html<br />
<br />
Lenient, or optimistic, evaluation is an implementation approach that lies somewhere between lazy and strict, and combines eager evaluation with non-strict semantics. This seems to be considered more promising for parallelisation.<br />
<br />
This paper implies (section 2.2.1) that lenient evaluation can handle circular data structures and recursive definitions, but cannot express infinite structures without explicit use of delays:<br />
<br />
"How Much Non-strictness do Lenient Programs Require?"<br />
(Klaus E. Schauser, Seth C. Goldstein)<br />
http://citeseer.ist.psu.edu/schauser95how.html<br />
<br />
Some experiments with non-lazy Haskell compilers have been attempted:<br />
[[Research_papers/Runtime_systems#Optimistic_Evaluation]]<br />
<br />
[[Category:Theoretical_foundations]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Lazy_evaluation&diff=59511Lazy evaluation2015-03-10T10:14:11Z<p>Apfelmus: </p>
<hr />
<div>'''Lazy evaluation''' is a method to evaluate a Haskell program. It means that expressions are not evaluated when they are bound to variables, but their evaluation is '''deferred''' until their results are needed by other computations. In consequence, arguments are not evaluated before they are passed to a function, but only when their values are actually used.<br />
<br />
Technically, lazy evaluation means [http://en.wikipedia.org/wiki/Evaluation_strategy#Call_by_name call-by-name] plus [[Sharing]]. A kind of opposite is [[eager evaluation]].<br />
<br />
Lazy evaluation is part of operational semantics, i.e. ''how'' a Haskell program is evaluated. The counterpart in denotational semantics, i.e. ''what'' a Haskell program computes, is called [[Non-strict semantics]]. This semantics allows one to bypass undefined values (e.g. results of infinite loops) and in this way it also allows one to process formally infinite data.<br />
<br />
While lazy evaluation has many advantages, its main drawback is that memory usage becomes hard to predict. The things is that while two expressions, like <hask>2+2 :: Int</hask> and <hask>4 :: Int</hask>, may denote the same value 4, they may have very different sizes and hence use different amounts of memory.<br />
<br />
An extreme example would be the infinite list<br />
<hask>1 : 1 : 1 …</hask> and the expression <hask> let x = 1:x in x </hask>. The latter is represented as a cyclic graph, and takes only finite memory, but its denotation is the former infinite list.<br />
<br />
== See also ==<br />
<br />
* [[Lazy vs. non-strict]]<br />
* [https://hackhands.com/guide-lazy-evaluation-haskell/ The Incomplete Guide to Lazy Evaluation] – A series of tutorials on lazy evaluation: How it works, how it makes code more modular, how it relates to non-strict semantics, and other things.<br />
* [http://alpmestan.com/posts/2013-10-02-oh-my-laziness.html Oh my laziness!] – An introduction to laziness and strictness in Haskell.<br />
<br />
[[Category:Glossary]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Lazy_evaluation&diff=59510Lazy evaluation2015-03-10T10:02:58Z<p>Apfelmus: /* See also */</p>
<hr />
<div>'''Lazy evaluation''' means that expressions are not evaluated when they are bound to variables, but their evaluation is '''deferred''' until their results are needed by other computations. In consequence, arguments are not evaluated before they are passed to a function, but only when their values are actually used.<br />
<br />
Technically, lazy evaluation means [[Non-strict semantics]] and [[Sharing]]. A kind of opposite is [[eager evaluation]].<br />
<br />
Non-strict semantics allows one to bypass undefined values (e.g. results of infinite loops)<br />
and in this way it also allows one to process formally infinite data.<br />
<br />
When it comes to machine level and efficiency issues it is important whether or not equal objects share the same memory.<br />
A Haskell program cannot know whether <hask>2+2 :: Int</hask> and <hask>4 :: Int</hask> are different objects in the memory.<br />
In many cases it is not necessary to know it,<br />
but in some cases the difference between shared and separated objects yields different orders of space or time complexity.<br />
Consider the infinite list <hask> let x = 1:x in x </hask>.<br />
For non-strict semantics it would be ok to store this as a flat list <hask> 1 : 1 : 1 : 1 : ... </hask>,<br />
with memory consumption as big as the number of consumed <hask>1</hask>s.<br />
But with lazy evaluation (i.e. sharing) this becomes a list with a loop, a pointer back to the beginning.<br />
It only consumes constant space.<br />
In an imperative language (here [http://www.modula3.org/ Modula-3]) the same would be achieved with the following code:<br />
<br />
<code><br />
TYPE<br />
List =<br />
REF RECORD<br />
next: List;<br />
value: INTEGER;<br />
END;<br />
<br />
VAR<br />
x := NEW(List, value:=1);<br />
BEGIN<br />
x.next := x;<br />
END;<br />
</code><br />
<br />
Thus, lazy evaluation allows us to define cyclic graphs of pointers with warrantedly valid pointers.<br />
In contrast, C allows cyclic graphs of pointers, but pointers can be uninitialized, which is a nasty security hole.<br />
An eagerly evaluating functional language without hacks, would only allow for acyclic graphs of pointers.<br />
<br />
<br />
== See also ==<br />
<br />
* [[Lazy vs. non-strict]]<br />
* [https://hackhands.com/guide-lazy-evaluation-haskell/ The Incomplete Guide to Lazy Evaluation] – A series of tutorials on lazy evaluation: How it works, how it makes code more modular, how it relates to non-strict semantics, and other things.<br />
* [http://alpmestan.com/posts/2013-10-02-oh-my-laziness.html Oh my laziness!] – An introduction to laziness and strictness in Haskell.<br />
<br />
[[Category:Glossary]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Lazy_evaluation&diff=59509Lazy evaluation2015-03-10T10:01:29Z<p>Apfelmus: /* See also */ Fix external link</p>
<hr />
<div>'''Lazy evaluation''' means that expressions are not evaluated when they are bound to variables, but their evaluation is '''deferred''' until their results are needed by other computations. In consequence, arguments are not evaluated before they are passed to a function, but only when their values are actually used.<br />
<br />
Technically, lazy evaluation means [[Non-strict semantics]] and [[Sharing]]. A kind of opposite is [[eager evaluation]].<br />
<br />
Non-strict semantics allows one to bypass undefined values (e.g. results of infinite loops)<br />
and in this way it also allows one to process formally infinite data.<br />
<br />
When it comes to machine level and efficiency issues it is important whether or not equal objects share the same memory.<br />
A Haskell program cannot know whether <hask>2+2 :: Int</hask> and <hask>4 :: Int</hask> are different objects in the memory.<br />
In many cases it is not necessary to know it,<br />
but in some cases the difference between shared and separated objects yields different orders of space or time complexity.<br />
Consider the infinite list <hask> let x = 1:x in x </hask>.<br />
For non-strict semantics it would be ok to store this as a flat list <hask> 1 : 1 : 1 : 1 : ... </hask>,<br />
with memory consumption as big as the number of consumed <hask>1</hask>s.<br />
But with lazy evaluation (i.e. sharing) this becomes a list with a loop, a pointer back to the beginning.<br />
It only consumes constant space.<br />
In an imperative language (here [http://www.modula3.org/ Modula-3]) the same would be achieved with the following code:<br />
<br />
<code><br />
TYPE<br />
List =<br />
REF RECORD<br />
next: List;<br />
value: INTEGER;<br />
END;<br />
<br />
VAR<br />
x := NEW(List, value:=1);<br />
BEGIN<br />
x.next := x;<br />
END;<br />
</code><br />
<br />
Thus, lazy evaluation allows us to define cyclic graphs of pointers with warrantedly valid pointers.<br />
In contrast, C allows cyclic graphs of pointers, but pointers can be uninitialized, which is a nasty security hole.<br />
An eagerly evaluating functional language without hacks, would only allow for acyclic graphs of pointers.<br />
<br />
<br />
== See also ==<br />
<br />
* [[Lazy vs. non-strict]]<br />
* [http://alpmestan.com/posts/2013-10-02-oh-my-laziness.html Oh my laziness!] – An introduction to laziness and strictness in Haskell<br />
<br />
[[Category:Glossary]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Tomato-rubato&diff=59180Tomato-rubato2015-01-04T22:25:09Z<p>Apfelmus: </p>
<hr />
<div>== What is it? ==<br />
<br />
''Tomato-rubato'' is an easy to use library for live audio programming in Haskell. Instant gratification from your speakers by typing into GHCi!<br />
<br />
== Status ==<br />
<br />
Tomato-rubato is currently in a very experimental phase and will likely remain that way in the foreseeable future. In other words: this is a developer preview, the API may change at any time without notice. Adventurers only!<br />
<br />
A current offspring is the [http://hackage.haskell.org/package/tomato-rubato-openal tomato-rubato-openl] package which allows you to play raw audio data on your speakers. It has an extremely simple interface and uses [http://hackage.haskell.org/package/OpenAL-1.4.0.0 OpenAL] as a backend.<br />
<br />
== Releases and Resources ==<br />
* Download on hackage<br />
** [http://hackage.haskell.org/package/tomato-rubato-openal tomato-rubato-openal] - extremely simple library to play raw audio data<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus] <apfelmus at quantentunnel de><br />
** Bugs and feature requests? '''[https://github.com/HeinrichApfelmus/tomato-rubato/issues Issue Tracker!]'''<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=tomato-rubato+haskell+audio Ask on StackOverflow!]<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/tomato-rubato/ tomato-rubato] source</div>Apfelmushttps://wiki.haskell.org/index.php?title=Reactive-banana&diff=59165Reactive-banana2014-12-24T19:15:26Z<p>Apfelmus: /* What is it? */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:left;"><br />
[[Image:Reactive-Banana-banana.png|Reactive banana displaying trigger-happy <code>Behavior</code>.]]</div><br />
''Reactive-banana'' is a library for [[Functional Reactive Programming]] (FRP).<br />
<br />
FRP offers an elegant and concise way to express interactive programs such as graphical 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.<br />
<br />
The goal of the library is to provide a solid foundation.<br />
* 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.<br />
* The library features an '''efficient implementation'''. No more spooky time leaks, predicting space & time usage should be straightforward.<br />
* A plethora of [[#documentation|example code]] helps with getting started.<br />
<br />
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.<br />
<br />
[[#feedback|Feedback]] is welcome, I want to hear from you!<br />
<br />
== Status ==<br />
<br />
Current development focuses on performance. Applications to GUI programming are explored in the sister project [[Threepenny-gui|threepenny-gui]].<br />
<br />
* 29 January 2014: reactive-banana 0.8.0.0 released.<br />
* 21 November 2013: reactive-threepenny-gui deprecated again, because [[Threepenny-gui|threepenny-gui]] now has its own FRP subsystem built-in.<br />
* 02 August 2013: Initial release of reactive-banana-threepenny. Binds to the threepenny-gui GUI library.<br />
* 26 August 2012: reactive-banana 0.7.0.0 released. Features dynamic event switching.<br />
* 15 May 2012: reactive-banana 0.6.0.0 released.<br />
* 25 March 2012: reactive-banana 0.5.0.0 released.<br />
* 24 October 2011: reactive-banana 0.4.3.0 released.<br />
* 26 September 2011: Added some more examples, reactive-banana 0.4.2.0 released.<br />
* 14 July 2011: Implemented many examples, reactive-banana 0.4.1.0 released.<br />
* 22 June 2011: reactive-banana 0.3.0.0 released<br />
* 28 April 2011: reactive-banana 0.2.0.0 released<br />
== Fake Testimonials ==<br />
<br />
"In the programming-language world, one rule of survival is simple: dance or die. This library makes dancing easy." – ''Simon Banana Jones''<br />
<br />
"About the use of language: it is impossible to sharpen a pencil with a blunt axe. You should try reactive-banana instead." — ''Event Dijkstra''<br />
<br />
"When I need a <code>bullet</code> event, I can just trigger it." — ''Billy the Reactive Banana''<br />
<br />
"This should be in a museum!" — ''Banana Jones''<br />
<br />
"Hey Mister! Why not use reactive-banana as a smartphone app to brush your teeth?" — ''Tommy "Banana" Johnson''<br />
<br />
== Releases and Resources ==<br />
* Download and installation from Hackage<br />
** {{HackagePackage|id=reactive-banana}} - the FRP library itself<br />
** {{HackagePackage|id=reactive-banana-sdl}} - binding to the [[SDL]] library<br />
** {{HackagePackage|id=reactive-banana-wx}} - binding to the [[wxHaskell]] GUI library<br />
<br />
* <span id="documentation">Documentation</span><br />
** '''[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)]'''<br />
** [[FRP explanation using reactive-banana | Unofficial tutorial on the Haskell wiki]]<br />
** [http://hackage.haskell.org/package/reactive-banana API reference]<br />
** '''[[/Examples/]]'''<br />
** [http://apfelmus.nfshost.com/blog.html#functional-reactive-programming-frp Developer Blog]<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus]<br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/reactive-banana/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=reactive-programming+haskell+frp+reactive-banana Ask on StackOverflow!]<br />
** More questions? [mailto:apfelmus%20at%20quantentunnel%20de Email] or [https://hackhands.com/apfelmus live help]!<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/develop/reactive-banana reactive-banana] development branch<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/master/reactive-banana-wx reactive-banana-wx] master branch<br />
<br />
== External Links ==<br />
* [https://github.com/bernstein/breakout breakout], a small game<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:User interfaces]]<br />
[[Category:Libraries]]<br />
[[Category:wxHaskell]]<br />
[[Category:Packages]]<br />
[[Category:Robotics]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Threepenny-gui&diff=59074Threepenny-gui2014-11-04T09:14:51Z<p>Apfelmus: /* What is it not? */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:right; width:16em; font-size:90%; font-family:serif; border:1px solid grey; padding:1ex;"><br />
<div><br />
Und der Haifisch, der hat Zähne<br><br />
Und die trägt er im Gesicht<br><br />
Und Macheath, der hat ein Messer<br><br />
Doch das Messer sieht man nicht.<br><br />
</div><br />
Bertold Brecht - ''The Threepenny Opera''<br />
</div><br />
''Threepenny-gui'' is a GUI framework that uses the web browser as a display.<br />
<br />
Features include:<br />
* '''Easy installation.''' Everyone has a reasonably modern web browser installed. Just install the library from hackage and you are ready to go. The library is cross-platform.<br />
* '''HTML'''. You have all capabilities of HTML at your disposal when creating user interfaces. This is a blessing, but it can also be a curse, so the library includes a few layout combinators to quickly create user interfaces without the need to deal with the mess that is CSS. A small foreign function interface (FFI) for JavaScript allows you to include JS client libraries.<br />
* [[Functional Reactive Programming]] ('''FRP''') promises to eliminate the spaghetti code that you usually get when using the traditional imperative event-based style for programming user interactions. Threepenny has an FRP library built-in, but its use is completely optional. Employ FRP when it is convenient and fall back to the traditional style when you hit an impasse.<br />
<br />
== What is it not? ==<br />
<br />
As cool as Threepenny may be, it is ...<br />
<br />
* ... not a web front-end. The server is meant to be run from localhost. Latency would be too high to use it as a web app. That said, it's perfectly stuitable for implementing multi-user apps on a local network, see the [https://github.com/HeinrichApfelmus/threepenny-gui/blob/master/samples/Chat.hs Chat.hs example].<br />
* ... not a JavaScript or HTML library. It's a GUI framework with a Haskell API and abstracts many aspects of the document object model. While some basic HTML skills are needed, no knowledge of JavaScript is required to use Threepenny, though you can include external client libraries if you really want to.<br />
<br />
If you want to write a web app, have a look at projects like [https://github.com/faylang/fay/wiki Fay], [https://github.com/ghcjs/ghcjs GHCJS] and [https://github.com/valderman/haste-compiler Haste]. That said, the Threepenny API may be ported to some of these projects as well in the future, but that is not the focus right now.<br />
<br />
== Status ==<br />
<br />
The library is still very much in flux, significant API changes are likely in future versions. The goal is make GUI programming as simple as possible, and that just needs some experimentation.<br />
<br />
* 4 October 2014 — Release of threepenny-gui-0.5.0.0<br />
* 21 November 2013 — Release of threepenny-gui-0.4.0.0<br />
* 7 September 2013 — Release of threepenny-gui-0.3.0.0<br />
<br />
== Gallery ==<br />
<br />
Applications written with Threepenny.<br />
<br />
<table><br />
<tr><br />
<td><br />
[http://fluffynukeit.com/?page_id=535 Daniel Austin's ''FNIStash'']<br />
<br>Editor for [http://en.wikipedia.org/wiki/Torchlight_II Torchlight 2] inventories.<br />
<br>[[Image:Threepenny-gui-fnistash.png|x300px]]<br />
<td><br />
[https://bitbucket.org/duplode/stunts-cartography Daniel Mlot's ''Stunts Cartography Track Viewer'']<br />
<br>Map viewer for the [http://scr.stunts.hu/ Stunts] racing game.<br />
<br>[[Image:Threepenny-gui-stunts.png|x300px]]<br />
<tr><br />
<td><br />
[https://github.com/CarstenKoenig/Holidays2013 Carsten König's holiday project]<br />
<br>Small viewer for the Mandelbrot set.<br />
<br>[[Image:Threepenny-gui-mandelbrot.png|300px]]<br />
<td><br />
[https://github.com/Chaddai/CurveProject Chaddai's ''CurveProject'']<br />
<br>Plotting curves for math teachers.<br />
<br>[[Image:Threepenny-gui-curveproject.jpg|386px]]<br />
</table><br />
<br />
== Releases and Resources ==<br />
* Download on Hackage<br />
** {{HackagePackage|id=threepenny-gui}}<br />
* <span id="documentation">Documentation</span><br />
** [http://hackage.haskell.org/package/threepenny-gui API reference]<br />
** '''[https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/samples#readme Examples]'''<br />
** [http://apfelmus.nfshost.com/blog.html#gui-programming Developer Blog]<br />
** [https://github.com/yuvallanger/threepenny-gui/blob/tutorial/samples/BarTab.lhs A work in progress tutorial] by [https://github.com/yuvallanger Yuval Langer] - help will be dearly appreciated.<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus]<br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/threepenny-gui/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=haskell+threepenny-gui+gui Ask on StackOverflow!]<br />
** More questions? [mailto:apfelmus%20at%20quantentunnel%20de Email] or [https://hackhands.com/apfelmus live help]!<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/ threepenny-gui] master branch<br />
<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:Libraries]]<br />
[[Category:Packages]]<br />
[[Category:User interfaces]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Reactive-banana&diff=59048Reactive-banana2014-10-29T18:38:48Z<p>Apfelmus: /* Releases and Resources */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:left;"><br />
[[Image:Reactive-Banana-banana.png|Reactive banana displaying trigger-happy <code>Behavior</code>.]]</div><br />
''Reactive-banana'' is a library for [[Functional Reactive Programming]] (FRP).<br />
<br />
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.<br />
<br />
The goal of the library is to provide a solid foundation.<br />
* 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.<br />
* 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.<br />
* The library features an '''efficient implementation'''. No more spooky time leaks, predicting space & time usage should be straightforward.<br />
<br />
[[#feedback|Feedback]] is welcome, I want to hear from you!<br />
<br />
== Status ==<br />
<br />
Current development focuses on performance. Applications to GUI programming are explored in the sister project [[Threepenny-gui|threepenny-gui]].<br />
<br />
* 29 January 2014: reactive-banana 0.8.0.0 released.<br />
* 21 November 2013: reactive-threepenny-gui deprecated again, because [[Threepenny-gui|threepenny-gui]] now has its own FRP subsystem built-in.<br />
* 02 August 2013: Initial release of reactive-banana-threepenny. Binds to the threepenny-gui GUI library.<br />
* 26 August 2012: reactive-banana 0.7.0.0 released. Features dynamic event switching.<br />
* 15 May 2012: reactive-banana 0.6.0.0 released.<br />
* 25 March 2012: reactive-banana 0.5.0.0 released.<br />
* 24 October 2011: reactive-banana 0.4.3.0 released.<br />
* 26 September 2011: Added some more examples, reactive-banana 0.4.2.0 released.<br />
* 14 July 2011: Implemented many examples, reactive-banana 0.4.1.0 released.<br />
* 22 June 2011: reactive-banana 0.3.0.0 released<br />
* 28 April 2011: reactive-banana 0.2.0.0 released<br />
== Fake Testimonials ==<br />
<br />
"In the programming-language world, one rule of survival is simple: dance or die. This library makes dancing easy." – ''Simon Banana Jones''<br />
<br />
"About the use of language: it is impossible to sharpen a pencil with a blunt axe. You should try reactive-banana instead." — ''Event Dijkstra''<br />
<br />
"When I need a <code>bullet</code> event, I can just trigger it." — ''Billy the Reactive Banana''<br />
<br />
"This should be in a museum!" — ''Banana Jones''<br />
<br />
"Hey Mister! Why not use reactive-banana as a smartphone app to brush your teeth?" — ''Tommy "Banana" Johnson''<br />
<br />
== Releases and Resources ==<br />
* Download and installation from Hackage<br />
** {{HackagePackage|id=reactive-banana}} - the FRP library itself<br />
** {{HackagePackage|id=reactive-banana-sdl}} - binding to the [[SDL]] library<br />
** {{HackagePackage|id=reactive-banana-wx}} - binding to the [[wxHaskell]] GUI library<br />
<br />
* <span id="documentation">Documentation</span><br />
** '''[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)]'''<br />
** [[FRP explanation using reactive-banana | Unofficial tutorial on the Haskell wiki]]<br />
** [http://hackage.haskell.org/package/reactive-banana API reference]<br />
** '''[[/Examples/]]'''<br />
** [http://apfelmus.nfshost.com/blog.html#functional-reactive-programming-frp Developer Blog]<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus]<br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/reactive-banana/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=reactive-programming+haskell+frp+reactive-banana Ask on StackOverflow!]<br />
** More questions? [mailto:apfelmus%20at%20quantentunnel%20de Email] or [https://hackhands.com/apfelmus live help]!<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/develop/reactive-banana reactive-banana] development branch<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/master/reactive-banana-wx reactive-banana-wx] master branch<br />
<br />
== External Links ==<br />
* [https://github.com/bernstein/breakout breakout], a small game<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:User interfaces]]<br />
[[Category:Libraries]]<br />
[[Category:wxHaskell]]<br />
[[Category:Packages]]<br />
[[Category:Robotics]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Threepenny-gui&diff=59047Threepenny-gui2014-10-29T18:38:04Z<p>Apfelmus: /* Releases and Resources */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:right; width:16em; font-size:90%; font-family:serif; border:1px solid grey; padding:1ex;"><br />
<div><br />
Und der Haifisch, der hat Zähne<br><br />
Und die trägt er im Gesicht<br><br />
Und Macheath, der hat ein Messer<br><br />
Doch das Messer sieht man nicht.<br><br />
</div><br />
Bertold Brecht - ''The Threepenny Opera''<br />
</div><br />
''Threepenny-gui'' is a GUI framework that uses the web browser as a display.<br />
<br />
Features include:<br />
* '''Easy installation.''' Everyone has a reasonably modern web browser installed. Just install the library from hackage and you are ready to go. The library is cross-platform.<br />
* '''HTML'''. You have all capabilities of HTML at your disposal when creating user interfaces. This is a blessing, but it can also be a curse, so the library includes a few layout combinators to quickly create user interfaces without the need to deal with the mess that is CSS. A small foreign function interface (FFI) for JavaScript allows you to include JS client libraries.<br />
* [[Functional Reactive Programming]] ('''FRP''') promises to eliminate the spaghetti code that you usually get when using the traditional imperative event-based style for programming user interactions. Threepenny has an FRP library built-in, but its use is completely optional. Employ FRP when it is convenient and fall back to the traditional style when you hit an impasse.<br />
<br />
== What is it not? ==<br />
<br />
As cool as Threepenny may be, it is ...<br />
<br />
* ... not a web front-end. The server is meant to be run from localhost. Latency would be too high to use it as a web app. That said, it's perfectly stuitable for implementing multi-user apps on a local network, see the [https://github.com/HeinrichApfelmus/threepenny-gui/blob/master/src/Chat.hs Chat.hs example].<br />
* ... not a JavaScript or HTML library. It's a GUI framework with a Haskell API and abstracts many aspects of the document object model. While some basic HTML skills are needed, no knowledge of JavaScript is required to use Threepenny, though you can include external client libraries if you really want to.<br />
<br />
If you want to write a web app, have a look at projects like [https://github.com/faylang/fay/wiki Fay], [https://github.com/ghcjs/ghcjs GHCJS] and [https://github.com/valderman/haste-compiler Haste]. That said, the Threepenny API may be ported to some of these projects as well in the future, but that is not the focus right now.<br />
<br />
== Status ==<br />
<br />
The library is still very much in flux, significant API changes are likely in future versions. The goal is make GUI programming as simple as possible, and that just needs some experimentation.<br />
<br />
* 4 October 2014 — Release of threepenny-gui-0.5.0.0<br />
* 21 November 2013 — Release of threepenny-gui-0.4.0.0<br />
* 7 September 2013 — Release of threepenny-gui-0.3.0.0<br />
<br />
== Gallery ==<br />
<br />
Applications written with Threepenny.<br />
<br />
<table><br />
<tr><br />
<td><br />
[http://fluffynukeit.com/?page_id=535 Daniel Austin's ''FNIStash'']<br />
<br>Editor for [http://en.wikipedia.org/wiki/Torchlight_II Torchlight 2] inventories.<br />
<br>[[Image:Threepenny-gui-fnistash.png|x300px]]<br />
<td><br />
[https://bitbucket.org/duplode/stunts-cartography Daniel Mlot's ''Stunts Cartography Track Viewer'']<br />
<br>Map viewer for the [http://scr.stunts.hu/ Stunts] racing game.<br />
<br>[[Image:Threepenny-gui-stunts.png|x300px]]<br />
<tr><br />
<td><br />
[https://github.com/CarstenKoenig/Holidays2013 Carsten König's holiday project]<br />
<br>Small viewer for the Mandelbrot set.<br />
<br>[[Image:Threepenny-gui-mandelbrot.png|300px]]<br />
<td><br />
[https://github.com/Chaddai/CurveProject Chaddai's ''CurveProject'']<br />
<br>Plotting curves for math teachers.<br />
<br>[[Image:Threepenny-gui-curveproject.jpg|386px]]<br />
</table><br />
<br />
== Releases and Resources ==<br />
* Download on Hackage<br />
** {{HackagePackage|id=threepenny-gui}}<br />
* <span id="documentation">Documentation</span><br />
** [http://hackage.haskell.org/package/threepenny-gui API reference]<br />
** '''[https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/samples#readme Examples]'''<br />
** [http://apfelmus.nfshost.com/blog.html#gui-programming Developer Blog]<br />
** [https://github.com/yuvallanger/threepenny-gui/blob/tutorial/samples/BarTab.lhs A work in progress tutorial] by [https://github.com/yuvallanger Yuval Langer] - help will be dearly appreciated.<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus]<br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/threepenny-gui/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=haskell+threepenny-gui+gui Ask on StackOverflow!]<br />
** More questions? [mailto:apfelmus%20at%20quantentunnel%20de Email] or [https://hackhands.com/apfelmus live help]!<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/ threepenny-gui] master branch<br />
<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:Libraries]]<br />
[[Category:Packages]]<br />
[[Category:User interfaces]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Threepenny-gui&diff=59046Threepenny-gui2014-10-29T18:37:03Z<p>Apfelmus: /* Releases and Resources */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:right; width:16em; font-size:90%; font-family:serif; border:1px solid grey; padding:1ex;"><br />
<div><br />
Und der Haifisch, der hat Zähne<br><br />
Und die trägt er im Gesicht<br><br />
Und Macheath, der hat ein Messer<br><br />
Doch das Messer sieht man nicht.<br><br />
</div><br />
Bertold Brecht - ''The Threepenny Opera''<br />
</div><br />
''Threepenny-gui'' is a GUI framework that uses the web browser as a display.<br />
<br />
Features include:<br />
* '''Easy installation.''' Everyone has a reasonably modern web browser installed. Just install the library from hackage and you are ready to go. The library is cross-platform.<br />
* '''HTML'''. You have all capabilities of HTML at your disposal when creating user interfaces. This is a blessing, but it can also be a curse, so the library includes a few layout combinators to quickly create user interfaces without the need to deal with the mess that is CSS. A small foreign function interface (FFI) for JavaScript allows you to include JS client libraries.<br />
* [[Functional Reactive Programming]] ('''FRP''') promises to eliminate the spaghetti code that you usually get when using the traditional imperative event-based style for programming user interactions. Threepenny has an FRP library built-in, but its use is completely optional. Employ FRP when it is convenient and fall back to the traditional style when you hit an impasse.<br />
<br />
== What is it not? ==<br />
<br />
As cool as Threepenny may be, it is ...<br />
<br />
* ... not a web front-end. The server is meant to be run from localhost. Latency would be too high to use it as a web app. That said, it's perfectly stuitable for implementing multi-user apps on a local network, see the [https://github.com/HeinrichApfelmus/threepenny-gui/blob/master/src/Chat.hs Chat.hs example].<br />
* ... not a JavaScript or HTML library. It's a GUI framework with a Haskell API and abstracts many aspects of the document object model. While some basic HTML skills are needed, no knowledge of JavaScript is required to use Threepenny, though you can include external client libraries if you really want to.<br />
<br />
If you want to write a web app, have a look at projects like [https://github.com/faylang/fay/wiki Fay], [https://github.com/ghcjs/ghcjs GHCJS] and [https://github.com/valderman/haste-compiler Haste]. That said, the Threepenny API may be ported to some of these projects as well in the future, but that is not the focus right now.<br />
<br />
== Status ==<br />
<br />
The library is still very much in flux, significant API changes are likely in future versions. The goal is make GUI programming as simple as possible, and that just needs some experimentation.<br />
<br />
* 4 October 2014 — Release of threepenny-gui-0.5.0.0<br />
* 21 November 2013 — Release of threepenny-gui-0.4.0.0<br />
* 7 September 2013 — Release of threepenny-gui-0.3.0.0<br />
<br />
== Gallery ==<br />
<br />
Applications written with Threepenny.<br />
<br />
<table><br />
<tr><br />
<td><br />
[http://fluffynukeit.com/?page_id=535 Daniel Austin's ''FNIStash'']<br />
<br>Editor for [http://en.wikipedia.org/wiki/Torchlight_II Torchlight 2] inventories.<br />
<br>[[Image:Threepenny-gui-fnistash.png|x300px]]<br />
<td><br />
[https://bitbucket.org/duplode/stunts-cartography Daniel Mlot's ''Stunts Cartography Track Viewer'']<br />
<br>Map viewer for the [http://scr.stunts.hu/ Stunts] racing game.<br />
<br>[[Image:Threepenny-gui-stunts.png|x300px]]<br />
<tr><br />
<td><br />
[https://github.com/CarstenKoenig/Holidays2013 Carsten König's holiday project]<br />
<br>Small viewer for the Mandelbrot set.<br />
<br>[[Image:Threepenny-gui-mandelbrot.png|300px]]<br />
<td><br />
[https://github.com/Chaddai/CurveProject Chaddai's ''CurveProject'']<br />
<br>Plotting curves for math teachers.<br />
<br>[[Image:Threepenny-gui-curveproject.jpg|386px]]<br />
</table><br />
<br />
== Releases and Resources ==<br />
* Download on Hackage<br />
** {{HackagePackage|id=threepenny-gui}}<br />
* <span id="documentation">Documentation</span><br />
** [http://hackage.haskell.org/package/threepenny-gui API reference]<br />
** '''[https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/samples#readme Examples]'''<br />
** [http://apfelmus.nfshost.com/blog.html#gui-programming Developer Blog]<br />
** [https://github.com/yuvallanger/threepenny-gui/blob/tutorial/samples/BarTab.lhs A work in progress tutorial] by [https://github.com/yuvallanger Yuval Langer] - help will be dearly appreciated.<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus]<br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/threepenny-gui/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** General questions? [http://stackoverflow.com/questions/ask?tags=haskell+threepenny-gui+gui Ask on StackOverflow!]<br />
** Specific questions? [mailto:apfelmus%20at%20quantentunnel%20de Email] or [https://hackhands.com/apfelmus live help]!<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/ threepenny-gui] master branch<br />
<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:Libraries]]<br />
[[Category:Packages]]<br />
[[Category:User interfaces]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Threepenny-gui&diff=59021Threepenny-gui2014-10-21T15:24:02Z<p>Apfelmus: /* What is it? */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:right; width:16em; font-size:90%; font-family:serif; border:1px solid grey; padding:1ex;"><br />
<div><br />
Und der Haifisch, der hat Zähne<br><br />
Und die trägt er im Gesicht<br><br />
Und Macheath, der hat ein Messer<br><br />
Doch das Messer sieht man nicht.<br><br />
</div><br />
Bertold Brecht - ''The Threepenny Opera''<br />
</div><br />
''Threepenny-gui'' is a GUI framework that uses the web browser as a display.<br />
<br />
Features include:<br />
* '''Easy installation.''' Everyone has a reasonably modern web browser installed. Just install the library from hackage and you are ready to go. The library is cross-platform.<br />
* '''HTML'''. You have all capabilities of HTML at your disposal when creating user interfaces. This is a blessing, but it can also be a curse, so the library includes a few layout combinators to quickly create user interfaces without the need to deal with the mess that is CSS. A small foreign function interface (FFI) for JavaScript allows you to include JS client libraries.<br />
* [[Functional Reactive Programming]] ('''FRP''') promises to eliminate the spaghetti code that you usually get when using the traditional imperative event-based style for programming user interactions. Threepenny has an FRP library built-in, but its use is completely optional. Employ FRP when it is convenient and fall back to the traditional style when you hit an impasse.<br />
<br />
== What is it not? ==<br />
<br />
As cool as Threepenny may be, it is ...<br />
<br />
* ... not a web front-end. The server is meant to be run from localhost. Latency would be too high to use it as a web app. That said, it's perfectly stuitable for implementing multi-user apps on a local network, see the [https://github.com/HeinrichApfelmus/threepenny-gui/blob/master/src/Chat.hs Chat.hs example].<br />
* ... not a JavaScript or HTML library. It's a GUI framework with a Haskell API and abstracts many aspects of the document object model. While some basic HTML skills are needed, no knowledge of JavaScript is required to use Threepenny, though you can include external client libraries if you really want to.<br />
<br />
If you want to write a web app, have a look at projects like [https://github.com/faylang/fay/wiki Fay], [https://github.com/ghcjs/ghcjs GHCJS] and [https://github.com/valderman/haste-compiler Haste]. That said, the Threepenny API may be ported to some of these projects as well in the future, but that is not the focus right now.<br />
<br />
== Status ==<br />
<br />
The library is still very much in flux, significant API changes are likely in future versions. The goal is make GUI programming as simple as possible, and that just needs some experimentation.<br />
<br />
* 4 October 2014 — Release of threepenny-gui-0.5.0.0<br />
* 21 November 2013 — Release of threepenny-gui-0.4.0.0<br />
* 7 September 2013 — Release of threepenny-gui-0.3.0.0<br />
<br />
== Gallery ==<br />
<br />
Applications written with Threepenny.<br />
<br />
<table><br />
<tr><br />
<td><br />
[http://fluffynukeit.com/?page_id=535 Daniel Austin's ''FNIStash'']<br />
<br>Editor for [http://en.wikipedia.org/wiki/Torchlight_II Torchlight 2] inventories.<br />
<br>[[Image:Threepenny-gui-fnistash.png|x300px]]<br />
<td><br />
[https://bitbucket.org/duplode/stunts-cartography Daniel Mlot's ''Stunts Cartography Track Viewer'']<br />
<br>Map viewer for the [http://scr.stunts.hu/ Stunts] racing game.<br />
<br>[[Image:Threepenny-gui-stunts.png|x300px]]<br />
<tr><br />
<td><br />
[https://github.com/CarstenKoenig/Holidays2013 Carsten König's holiday project]<br />
<br>Small viewer for the Mandelbrot set.<br />
<br>[[Image:Threepenny-gui-mandelbrot.png|300px]]<br />
<td><br />
[https://github.com/Chaddai/CurveProject Chaddai's ''CurveProject'']<br />
<br>Plotting curves for math teachers.<br />
<br>[[Image:Threepenny-gui-curveproject.jpg|386px]]<br />
</table><br />
<br />
== Releases and Resources ==<br />
* Download on Hackage<br />
** {{HackagePackage|id=threepenny-gui}}<br />
* <span id="documentation">Documentation</span><br />
** [http://hackage.haskell.org/package/threepenny-gui API reference]<br />
** '''[https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/samples#readme Examples]'''<br />
** [http://apfelmus.nfshost.com/blog.html#gui-programming Developer Blog]<br />
** [https://github.com/yuvallanger/threepenny-gui/blob/tutorial/samples/BarTab.lhs A work in progress tutorial] by [https://github.com/yuvallanger Yuval Langer] - help will be dearly appreciated.<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus] <apfelmus at quantentunnel de><br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/threepenny-gui/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=haskell+threepenny-gui+gui Ask on StackOverflow!]<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/ threepenny-gui] master branch<br />
<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:Libraries]]<br />
[[Category:Packages]]<br />
[[Category:User interfaces]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Threepenny-gui&diff=58997Threepenny-gui2014-10-15T09:18:01Z<p>Apfelmus: /* Releases and Resources */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:right; width:16em; font-size:90%; font-family:serif; border:1px solid grey; padding:1ex;"><br />
<div><br />
Und der Haifisch, der hat Zähne<br><br />
Und die trägt er im Gesicht<br><br />
Und Macheath, der hat ein Messer<br><br />
Doch das Messer sieht man nicht.<br><br />
</div><br />
Bertold Brecht - ''The Threepenny Opera''<br />
</div><br />
''Threepenny-gui'' is a GUI framework that uses the web browser as a display.<br />
<br />
Features include:<br />
* '''Easy installation.''' Everyone has a reasonably modern web browser installed. Just install the library from hackage and you are ready to go. The library is cross-platform.<br />
* '''HTML'''. You have all capabilities of HTML at your disposal when creating user interfaces. This is a blessing, but it can also be a curse, so the library includes a few layout combinators to quickly create user interfaces without the need to deal with the mess that is CSS. A small JavaScript FFI allows you to include JS client libraries.<br />
* [[Functional Reactive Programming]] ('''FRP''') promises to eliminate the spaghetti code that you usually get when using the traditional imperative event-based style for programming user interactions. Threepenny has an FRP library built-in, but its use is completely optional. Employ FRP when it is convenient and fall back to the traditional style when you hit an impasse.<br />
<br />
== What is it not? ==<br />
<br />
As cool as Threepenny may be, it is ...<br />
<br />
* ... not a web front-end. The server is meant to be run from localhost. Latency would be too high to use it as a web app. That said, it's perfectly stuitable for implementing multi-user apps on a local network, see the [https://github.com/HeinrichApfelmus/threepenny-gui/blob/master/src/Chat.hs Chat.hs example].<br />
* ... not a JavaScript or HTML library. It's a GUI framework with a Haskell API and abstracts many aspects of the document object model. While some basic HTML skills are needed, no knowledge of JavaScript is required to use Threepenny, though you can include external client libraries if you really want to.<br />
<br />
If you want to write a web app, have a look at projects like [https://github.com/faylang/fay/wiki Fay], [https://github.com/ghcjs/ghcjs GHCJS] and [https://github.com/valderman/haste-compiler Haste]. That said, the Threepenny API may be ported to some of these projects as well in the future, but that is not the focus right now.<br />
<br />
== Status ==<br />
<br />
The library is still very much in flux, significant API changes are likely in future versions. The goal is make GUI programming as simple as possible, and that just needs some experimentation.<br />
<br />
* 4 October 2014 — Release of threepenny-gui-0.5.0.0<br />
* 21 November 2013 — Release of threepenny-gui-0.4.0.0<br />
* 7 September 2013 — Release of threepenny-gui-0.3.0.0<br />
<br />
== Gallery ==<br />
<br />
Applications written with Threepenny.<br />
<br />
<table><br />
<tr><br />
<td><br />
[http://fluffynukeit.com/?page_id=535 Daniel Austin's ''FNIStash'']<br />
<br>Editor for [http://en.wikipedia.org/wiki/Torchlight_II Torchlight 2] inventories.<br />
<br>[[Image:Threepenny-gui-fnistash.png|x300px]]<br />
<td><br />
[https://bitbucket.org/duplode/stunts-cartography Daniel Mlot's ''Stunts Cartography Track Viewer'']<br />
<br>Map viewer for the [http://scr.stunts.hu/ Stunts] racing game.<br />
<br>[[Image:Threepenny-gui-stunts.png|x300px]]<br />
<tr><br />
<td><br />
[https://github.com/CarstenKoenig/Holidays2013 Carsten König's holiday project]<br />
<br>Small viewer for the Mandelbrot set.<br />
<br>[[Image:Threepenny-gui-mandelbrot.png|300px]]<br />
<td><br />
[https://github.com/Chaddai/CurveProject Chaddai's ''CurveProject'']<br />
<br>Plotting curves for math teachers.<br />
<br>[[Image:Threepenny-gui-curveproject.jpg|386px]]<br />
</table><br />
<br />
== Releases and Resources ==<br />
* Download on Hackage<br />
** {{HackagePackage|id=threepenny-gui}}<br />
* <span id="documentation">Documentation</span><br />
** [http://hackage.haskell.org/package/threepenny-gui API reference]<br />
** '''[https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/samples#readme Examples]'''<br />
** [http://apfelmus.nfshost.com/blog.html#gui-programming Developer Blog]<br />
** [https://github.com/yuvallanger/threepenny-gui/blob/tutorial/samples/BarTab.lhs A work in progress tutorial] by [https://github.com/yuvallanger Yuval Langer] - help will be dearly appreciated.<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus] <apfelmus at quantentunnel de><br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/threepenny-gui/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=haskell+threepenny-gui+gui Ask on StackOverflow!]<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/ threepenny-gui] master branch<br />
<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:Libraries]]<br />
[[Category:Packages]]<br />
[[Category:User interfaces]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Threepenny-gui&diff=58955Threepenny-gui2014-10-04T09:01:49Z<p>Apfelmus: /* Status */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:right; width:16em; font-size:90%; font-family:serif; border:1px solid grey; padding:1ex;"><br />
<div><br />
Und der Haifisch, der hat Zähne<br><br />
Und die trägt er im Gesicht<br><br />
Und Macheath, der hat ein Messer<br><br />
Doch das Messer sieht man nicht.<br><br />
</div><br />
Bertold Brecht - ''The Threepenny Opera''<br />
</div><br />
''Threepenny-gui'' is a GUI framework that uses the web browser as a display.<br />
<br />
Features include:<br />
* '''Easy installation.''' Everyone has a reasonably modern web browser installed. Just install the library from hackage and you are ready to go. The library is cross-platform.<br />
* '''HTML'''. You have all capabilities of HTML at your disposal when creating user interfaces. This is a blessing, but it can also be a curse, so the library includes a few layout combinators to quickly create user interfaces without the need to deal with the mess that is CSS. A small JavaScript FFI allows you to include JS client libraries.<br />
* [[Functional Reactive Programming]] ('''FRP''') promises to eliminate the spaghetti code that you usually get when using the traditional imperative event-based style for programming user interactions. Threepenny has an FRP library built-in, but its use is completely optional. Employ FRP when it is convenient and fall back to the traditional style when you hit an impasse.<br />
<br />
== What is it not? ==<br />
<br />
As cool as Threepenny may be, it is ...<br />
<br />
* ... not a web front-end. The server is meant to be run from localhost. Latency would be too high to use it as a web app. That said, it's perfectly stuitable for implementing multi-user apps on a local network, see the [https://github.com/HeinrichApfelmus/threepenny-gui/blob/master/src/Chat.hs Chat.hs example].<br />
* ... not a JavaScript or HTML library. It's a GUI framework with a Haskell API and abstracts many aspects of the document object model. While some basic HTML skills are needed, no knowledge of JavaScript is required to use Threepenny, though you can include external client libraries if you really want to.<br />
<br />
If you want to write a web app, have a look at projects like [https://github.com/faylang/fay/wiki Fay], [https://github.com/ghcjs/ghcjs GHCJS] and [https://github.com/valderman/haste-compiler Haste]. That said, the Threepenny API may be ported to some of these projects as well in the future, but that is not the focus right now.<br />
<br />
== Status ==<br />
<br />
The library is still very much in flux, significant API changes are likely in future versions. The goal is make GUI programming as simple as possible, and that just needs some experimentation.<br />
<br />
* 4 October 2014 — Release of threepenny-gui-0.5.0.0<br />
* 21 November 2013 — Release of threepenny-gui-0.4.0.0<br />
* 7 September 2013 — Release of threepenny-gui-0.3.0.0<br />
<br />
== Gallery ==<br />
<br />
Applications written with Threepenny.<br />
<br />
<table><br />
<tr><br />
<td><br />
[http://fluffynukeit.com/?page_id=535 Daniel Austin's ''FNIStash'']<br />
<br>Editor for [http://en.wikipedia.org/wiki/Torchlight_II Torchlight 2] inventories.<br />
<br>[[Image:Threepenny-gui-fnistash.png|x300px]]<br />
<td><br />
[https://bitbucket.org/duplode/stunts-cartography Daniel Mlot's ''Stunts Cartography Track Viewer'']<br />
<br>Map viewer for the [http://scr.stunts.hu/ Stunts] racing game.<br />
<br>[[Image:Threepenny-gui-stunts.png|x300px]]<br />
<tr><br />
<td><br />
[https://github.com/CarstenKoenig/Holidays2013 Carsten König's holiday project]<br />
<br>Small viewer for the Mandelbrot set.<br />
<br>[[Image:Threepenny-gui-mandelbrot.png|300px]]<br />
<td><br />
[https://github.com/Chaddai/CurveProject Chaddai's ''CurveProject'']<br />
<br>Plotting curves for math teachers.<br />
<br>[[Image:Threepenny-gui-curveproject.jpg|386px]]<br />
</table><br />
<br />
== Releases and Resources ==<br />
* Download on Hackage<br />
** {{HackagePackage|id=threepenny-gui}}<br />
* <span id="documentation">Documentation</span><br />
** [http://hackage.haskell.org/package/threepenny-gui API reference]<br />
** '''[https://github.com/HeinrichApfelmus/threepenny-gui#examples Examples]'''<br />
** [http://apfelmus.nfshost.com/blog.html#gui-programming Developer Blog]<br />
** [https://github.com/yuvallanger/threepenny-gui/blob/tutorial/samples/BarTab.lhs A work in progress tutorial] by [https://github.com/yuvallanger Yuval Langer] - help will be dearly appreciated.<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus] <apfelmus at quantentunnel de><br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/threepenny-gui/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=haskell+threepenny-gui+gui Ask on StackOverflow!]<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/ threepenny-gui] master branch<br />
<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:Libraries]]<br />
[[Category:Packages]]<br />
[[Category:User interfaces]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Threepenny-gui&diff=58954Threepenny-gui2014-10-04T07:48:22Z<p>Apfelmus: /* Releases and Resources */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:right; width:16em; font-size:90%; font-family:serif; border:1px solid grey; padding:1ex;"><br />
<div><br />
Und der Haifisch, der hat Zähne<br><br />
Und die trägt er im Gesicht<br><br />
Und Macheath, der hat ein Messer<br><br />
Doch das Messer sieht man nicht.<br><br />
</div><br />
Bertold Brecht - ''The Threepenny Opera''<br />
</div><br />
''Threepenny-gui'' is a GUI framework that uses the web browser as a display.<br />
<br />
Features include:<br />
* '''Easy installation.''' Everyone has a reasonably modern web browser installed. Just install the library from hackage and you are ready to go. The library is cross-platform.<br />
* '''HTML'''. You have all capabilities of HTML at your disposal when creating user interfaces. This is a blessing, but it can also be a curse, so the library includes a few layout combinators to quickly create user interfaces without the need to deal with the mess that is CSS. A small JavaScript FFI allows you to include JS client libraries.<br />
* [[Functional Reactive Programming]] ('''FRP''') promises to eliminate the spaghetti code that you usually get when using the traditional imperative event-based style for programming user interactions. Threepenny has an FRP library built-in, but its use is completely optional. Employ FRP when it is convenient and fall back to the traditional style when you hit an impasse.<br />
<br />
== What is it not? ==<br />
<br />
As cool as Threepenny may be, it is ...<br />
<br />
* ... not a web front-end. The server is meant to be run from localhost. Latency would be too high to use it as a web app. That said, it's perfectly stuitable for implementing multi-user apps on a local network, see the [https://github.com/HeinrichApfelmus/threepenny-gui/blob/master/src/Chat.hs Chat.hs example].<br />
* ... not a JavaScript or HTML library. It's a GUI framework with a Haskell API and abstracts many aspects of the document object model. While some basic HTML skills are needed, no knowledge of JavaScript is required to use Threepenny, though you can include external client libraries if you really want to.<br />
<br />
If you want to write a web app, have a look at projects like [https://github.com/faylang/fay/wiki Fay], [https://github.com/ghcjs/ghcjs GHCJS] and [https://github.com/valderman/haste-compiler Haste]. That said, the Threepenny API may be ported to some of these projects as well in the future, but that is not the focus right now.<br />
<br />
== Status ==<br />
<br />
The library is still very much in flux, significant API changes are likely in future versions. The goal is make GUI programming as simple as possible, and that just needs some experimentation.<br />
<br />
* 21 November 2013 — Release of threepenny-gui-0.4.0.0<br />
* 7 September 2013 — Release of threepenny-gui-0.3.0.0<br />
<br />
== Gallery ==<br />
<br />
Applications written with Threepenny.<br />
<br />
<table><br />
<tr><br />
<td><br />
[http://fluffynukeit.com/?page_id=535 Daniel Austin's ''FNIStash'']<br />
<br>Editor for [http://en.wikipedia.org/wiki/Torchlight_II Torchlight 2] inventories.<br />
<br>[[Image:Threepenny-gui-fnistash.png|x300px]]<br />
<td><br />
[https://bitbucket.org/duplode/stunts-cartography Daniel Mlot's ''Stunts Cartography Track Viewer'']<br />
<br>Map viewer for the [http://scr.stunts.hu/ Stunts] racing game.<br />
<br>[[Image:Threepenny-gui-stunts.png|x300px]]<br />
<tr><br />
<td><br />
[https://github.com/CarstenKoenig/Holidays2013 Carsten König's holiday project]<br />
<br>Small viewer for the Mandelbrot set.<br />
<br>[[Image:Threepenny-gui-mandelbrot.png|300px]]<br />
<td><br />
[https://github.com/Chaddai/CurveProject Chaddai's ''CurveProject'']<br />
<br>Plotting curves for math teachers.<br />
<br>[[Image:Threepenny-gui-curveproject.jpg|386px]]<br />
</table><br />
<br />
== Releases and Resources ==<br />
* Download on Hackage<br />
** {{HackagePackage|id=threepenny-gui}}<br />
* <span id="documentation">Documentation</span><br />
** [http://hackage.haskell.org/package/threepenny-gui API reference]<br />
** '''[https://github.com/HeinrichApfelmus/threepenny-gui#examples Examples]'''<br />
** [http://apfelmus.nfshost.com/blog.html#gui-programming Developer Blog]<br />
** [https://github.com/yuvallanger/threepenny-gui/blob/tutorial/samples/BarTab.lhs A work in progress tutorial] by [https://github.com/yuvallanger Yuval Langer] - help will be dearly appreciated.<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus] <apfelmus at quantentunnel de><br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/threepenny-gui/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=haskell+threepenny-gui+gui Ask on StackOverflow!]<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/threepenny-gui/tree/master/ threepenny-gui] master branch<br />
<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:Libraries]]<br />
[[Category:Packages]]<br />
[[Category:User interfaces]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Reactive-banana&diff=58949Reactive-banana2014-10-01T21:21:45Z<p>Apfelmus: </p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:left;"><br />
[[Image:Reactive-Banana-banana.png|Reactive banana displaying trigger-happy <code>Behavior</code>.]]</div><br />
''Reactive-banana'' is a library for [[Functional Reactive Programming]] (FRP).<br />
<br />
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.<br />
<br />
The goal of the library is to provide a solid foundation.<br />
* 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.<br />
* 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.<br />
* The library features an '''efficient implementation'''. No more spooky time leaks, predicting space & time usage should be straightforward.<br />
<br />
[[#feedback|Feedback]] is welcome, I want to hear from you!<br />
<br />
== Status ==<br />
<br />
Current development focuses on performance. Applications to GUI programming are explored in the sister project [[Threepenny-gui|threepenny-gui]].<br />
<br />
* 29 January 2014: reactive-banana 0.8.0.0 released.<br />
* 21 November 2013: reactive-threepenny-gui deprecated again, because [[Threepenny-gui|threepenny-gui]] now has its own FRP subsystem built-in.<br />
* 02 August 2013: Initial release of reactive-banana-threepenny. Binds to the threepenny-gui GUI library.<br />
* 26 August 2012: reactive-banana 0.7.0.0 released. Features dynamic event switching.<br />
* 15 May 2012: reactive-banana 0.6.0.0 released.<br />
* 25 March 2012: reactive-banana 0.5.0.0 released.<br />
* 24 October 2011: reactive-banana 0.4.3.0 released.<br />
* 26 September 2011: Added some more examples, reactive-banana 0.4.2.0 released.<br />
* 14 July 2011: Implemented many examples, reactive-banana 0.4.1.0 released.<br />
* 22 June 2011: reactive-banana 0.3.0.0 released<br />
* 28 April 2011: reactive-banana 0.2.0.0 released<br />
== Fake Testimonials ==<br />
<br />
"In the programming-language world, one rule of survival is simple: dance or die. This library makes dancing easy." – ''Simon Banana Jones''<br />
<br />
"About the use of language: it is impossible to sharpen a pencil with a blunt axe. You should try reactive-banana instead." — ''Event Dijkstra''<br />
<br />
"When I need a <code>bullet</code> event, I can just trigger it." — ''Billy the Reactive Banana''<br />
<br />
"This should be in a museum!" — ''Banana Jones''<br />
<br />
"Hey Mister! Why not use reactive-banana as a smartphone app to brush your teeth?" — ''Tommy "Banana" Johnson''<br />
<br />
== Releases and Resources ==<br />
* Download and installation from Hackage<br />
** {{HackagePackage|id=reactive-banana}} - the FRP library itself<br />
** {{HackagePackage|id=reactive-banana-sdl}} - binding to the [[SDL]] library<br />
** {{HackagePackage|id=reactive-banana-wx}} - binding to the [[wxHaskell]] GUI library<br />
<br />
* <span id="documentation">Documentation</span><br />
** '''[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)]'''<br />
** [[FRP explanation using reactive-banana | Unofficial tutorial on the Haskell wiki]]<br />
** [http://hackage.haskell.org/package/reactive-banana API reference]<br />
** '''[[/Examples/]]'''<br />
** [http://apfelmus.nfshost.com/blog.html#functional-reactive-programming-frp Developer Blog]<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus] <apfelmus at quantentunnel de><br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/reactive-banana/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=reactive-programming+haskell+frp+reactive-banana Ask on StackOverflow!]<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/develop/reactive-banana reactive-banana] development branch<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/master/reactive-banana-wx reactive-banana-wx] master branch<br />
<br />
== External Links ==<br />
* [https://github.com/bernstein/breakout breakout], a small game<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:User interfaces]]<br />
[[Category:Libraries]]<br />
[[Category:wxHaskell]]<br />
[[Category:Packages]]<br />
[[Category:Robotics]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Threepenny-gui&diff=57911Threepenny-gui2014-04-19T09:10:42Z<p>Apfelmus: /* Releases and Resources */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:right; width:16em; font-size:90%; font-family:serif; border:1px solid grey; padding:1ex;"><br />
<div><br />
Und der Haifisch, der hat Zähne<br><br />
Und die trägt er im Gesicht<br><br />
Und Macheath, der hat ein Messer<br><br />
Doch das Messer sieht man nicht.<br><br />
</div><br />
Bertold Brecht - ''The Threepenny Opera''<br />
</div><br />
''Threepenny-gui'' is a GUI framework that uses the web browser as a display.<br />
<br />
Features include:<br />
* '''Easy installation.''' Everyone has a reasonably modern web browser installed. Just install the library from hackage and you are ready to go. The library is cross-platform.<br />
* '''HTML'''. You have all capabilities of HTML at your disposal when creating user interfaces. This is a blessing, but it can also be a curse, so the library includes a few layout combinators to quickly create user interfaces without the need to deal with the mess that is CSS. A small JavaScript FFI allows you to include JS client libraries.<br />
* [[Functional Reactive Programming]] ('''FRP''') promises to eliminate the spaghetti code that you usually get when using the traditional imperative event-based style for programming user interactions. Threepenny has an FRP library built-in, but its use is completely optional. Employ FRP when it is convenient and fall back to the traditional style when you hit an impasse.<br />
<br />
== What is it not? ==<br />
<br />
As cool as Threepenny may be, it is ...<br />
<br />
* ... not a web front-end. The server is meant to be run from localhost. Latency would be too high to use it as a web app. That said, it's perfectly stuitable for implementing multi-user apps on a local network, see the [https://github.com/HeinrichApfelmus/threepenny-gui/blob/master/src/Chat.hs Chat.hs example].<br />
* ... not a JavaScript or HTML library. It's a GUI framework with a Haskell API and abstracts many aspects of the document object model. While some basic HTML skills are needed, no knowledge of JavaScript is required to use Threepenny, though you can include external client libraries if you really want to.<br />
<br />
If you want to write a web app, have a look at projects like [https://github.com/faylang/fay/wiki Fay], [https://github.com/ghcjs/ghcjs GHCJS] and [https://github.com/valderman/haste-compiler Haste]. That said, the Threepenny API may be ported to some of these projects as well in the future, but that is not the focus right now.<br />
<br />
== Status ==<br />
<br />
The library is still very much in flux, significant API changes are likely in future versions. The goal is make GUI programming as simple as possible, and that just needs some experimentation.<br />
<br />
* 21 November 2013 — Release of threepenny-gui-0.4.0.0<br />
* 7 September 2013 — Release of threepenny-gui-0.3.0.0<br />
<br />
== Gallery ==<br />
<br />
Applications written with Threepenny.<br />
<br />
<table><br />
<tr><br />
<td><br />
[http://fluffynukeit.com/?page_id=535 Daniel Austin's ''FNIStash'']<br />
<br>Editor for [http://en.wikipedia.org/wiki/Torchlight_II Torchlight 2] inventories.<br />
<br>[[Image:Threepenny-gui-fnistash.png|x300px]]<br />
<td><br />
[https://bitbucket.org/duplode/stunts-cartography Daniel Mlot's ''Stunts Cartography Track Viewer'']<br />
<br>Map viewer for the [http://scr.stunts.hu/ Stunts] racing game.<br />
<br>[[Image:Threepenny-gui-stunts.png|x300px]]<br />
<tr><br />
<td><br />
[https://github.com/CarstenKoenig/Holidays2013 Carsten König's holiday project]<br />
<br>Small viewer for the Mandelbrot set.<br />
<br>[[Image:Threepenny-gui-mandelbrot.png|300px]]<br />
<td><br />
[https://github.com/Chaddai/CurveProject Chaddai's ''CurveProject'']<br />
<br>Plotting curves for math teachers.<br />
<br>[[Image:Threepenny-gui-curveproject.jpg|386px]]<br />
</table><br />
<br />
== Releases and Resources ==<br />
* Download on Hackage<br />
** {{HackagePackage|id=threepenny-gui}}<br />
* <span id="documentation">Documentation</span><br />
** [http://hackage.haskell.org/package/threepenny-gui API reference]<br />
** '''[https://github.com/HeinrichApfelmus/threepenny-gui#examples Examples]'''<br />
** [http://apfelmus.nfshost.com/blog.html#gui-programming Developer Blog]<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus] <apfelmus at quantentunnel de><br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/threepenny-gui/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=haskell+threepenny-gui+gui Ask on StackOverflow!]<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/threepenny-gui/tree/develop/ threepenny-gui] development branch<br />
<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:Libraries]]<br />
[[Category:Packages]]<br />
[[Category:User interfaces]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Reactive-banana&diff=57518Reactive-banana2014-01-30T00:12:30Z<p>Apfelmus: /* Releases and Resources */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:left;"><br />
[[Image:Reactive-Banana-banana.png|Reactive banana displaying trigger-happy <code>Behavior</code>.]]</div><br />
''Reactive-banana'' is a library for [[Functional Reactive Programming]] (FRP).<br />
<br />
Support the project with a small donation: [http://flattr.com/thing/384682/reactive-banana http://api.flattr.com/button/flattr-badge-large.png]<br />
<br />
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.<br />
<br />
The goal of the library is to provide a solid foundation.<br />
* 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.<br />
* 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.<br />
* The library features an '''efficient implementation'''. No more spooky time leaks, predicting space & time usage should be straightforward.<br />
<br />
[[#feedback|Feedback]] is welcome, I want to hear from you!<br />
<br />
== Status ==<br />
<br />
Current development focuses on performance. Applications to GUI programming are explored in the sister project [[Threepenny-gui|threepenny-gui]].<br />
<br />
* 29 January 2014: reactive-banana 0.8.0.0 released.<br />
* 21 November 2013: reactive-threepenny-gui deprecated again, because [[Threepenny-gui|threepenny-gui]] now has its own FRP subsystem built-in.<br />
* 02 August 2013: Initial release of reactive-banana-threepenny. Binds to the threepenny-gui GUI library.<br />
* 26 August 2012: reactive-banana 0.7.0.0 released. Features dynamic event switching.<br />
* 15 May 2012: reactive-banana 0.6.0.0 released.<br />
* 25 March 2012: reactive-banana 0.5.0.0 released.<br />
* 24 October 2011: reactive-banana 0.4.3.0 released.<br />
* 26 September 2011: Added some more examples, reactive-banana 0.4.2.0 released.<br />
* 14 July 2011: Implemented many examples, reactive-banana 0.4.1.0 released.<br />
* 22 June 2011: reactive-banana 0.3.0.0 released<br />
* 28 April 2011: reactive-banana 0.2.0.0 released<br />
== Fake Testimonials ==<br />
<br />
"In the programming-language world, one rule of survival is simple: dance or die. This library makes dancing easy." – ''Simon Banana Jones''<br />
<br />
"About the use of language: it is impossible to sharpen a pencil with a blunt axe. You should try reactive-banana instead." — ''Event Dijkstra''<br />
<br />
"When I need a <code>bullet</code> event, I can just trigger it." — ''Billy the Reactive Banana''<br />
<br />
"This should be in a museum!" — ''Banana Jones''<br />
<br />
"Hey Mister! Why not use reactive-banana as a smartphone app to brush your teeth?" — ''Tommy "Banana" Johnson''<br />
<br />
== Releases and Resources ==<br />
* Download and installation from Hackage<br />
** {{HackagePackage|id=reactive-banana}} - the FRP library itself<br />
** {{HackagePackage|id=reactive-banana-sdl}} - binding to the [[SDL]] library<br />
** {{HackagePackage|id=reactive-banana-wx}} - binding to the [[wxHaskell]] GUI library<br />
<br />
* <span id="documentation">Documentation</span><br />
** '''[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)]'''<br />
** [[FRP explanation using reactive-banana | Unofficial tutorial on the Haskell wiki]]<br />
** [http://hackage.haskell.org/package/reactive-banana API reference]<br />
** '''[[/Examples/]]'''<br />
** [http://apfelmus.nfshost.com/blog.html#functional-reactive-programming-frp Developer Blog]<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus] <apfelmus at quantentunnel de><br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/reactive-banana/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=reactive-programming+haskell+frp+reactive-banana Ask on StackOverflow!]<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/develop/reactive-banana reactive-banana] development branch<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/master/reactive-banana-wx reactive-banana-wx] master branch<br />
<br />
== External Links ==<br />
* [https://github.com/bernstein/breakout breakout], a small game<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:User interfaces]]<br />
[[Category:Libraries]]<br />
[[Category:wxHaskell]]<br />
[[Category:Packages]]<br />
[[Category:Robotics]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Reactive-banana&diff=57517Reactive-banana2014-01-29T10:41:08Z<p>Apfelmus: </p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:left;"><br />
[[Image:Reactive-Banana-banana.png|Reactive banana displaying trigger-happy <code>Behavior</code>.]]</div><br />
''Reactive-banana'' is a library for [[Functional Reactive Programming]] (FRP).<br />
<br />
Support the project with a small donation: [http://flattr.com/thing/384682/reactive-banana http://api.flattr.com/button/flattr-badge-large.png]<br />
<br />
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.<br />
<br />
The goal of the library is to provide a solid foundation.<br />
* 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.<br />
* 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.<br />
* The library features an '''efficient implementation'''. No more spooky time leaks, predicting space & time usage should be straightforward.<br />
<br />
[[#feedback|Feedback]] is welcome, I want to hear from you!<br />
<br />
== Status ==<br />
<br />
Current development focuses on performance. Applications to GUI programming are explored in the sister project [[Threepenny-gui|threepenny-gui]].<br />
<br />
* 29 January 2014: reactive-banana 0.8.0.0 released.<br />
* 21 November 2013: reactive-threepenny-gui deprecated again, because [[Threepenny-gui|threepenny-gui]] now has its own FRP subsystem built-in.<br />
* 02 August 2013: Initial release of reactive-banana-threepenny. Binds to the threepenny-gui GUI library.<br />
* 26 August 2012: reactive-banana 0.7.0.0 released. Features dynamic event switching.<br />
* 15 May 2012: reactive-banana 0.6.0.0 released.<br />
* 25 March 2012: reactive-banana 0.5.0.0 released.<br />
* 24 October 2011: reactive-banana 0.4.3.0 released.<br />
* 26 September 2011: Added some more examples, reactive-banana 0.4.2.0 released.<br />
* 14 July 2011: Implemented many examples, reactive-banana 0.4.1.0 released.<br />
* 22 June 2011: reactive-banana 0.3.0.0 released<br />
* 28 April 2011: reactive-banana 0.2.0.0 released<br />
== Fake Testimonials ==<br />
<br />
"In the programming-language world, one rule of survival is simple: dance or die. This library makes dancing easy." – ''Simon Banana Jones''<br />
<br />
"About the use of language: it is impossible to sharpen a pencil with a blunt axe. You should try reactive-banana instead." — ''Event Dijkstra''<br />
<br />
"When I need a <code>bullet</code> event, I can just trigger it." — ''Billy the Reactive Banana''<br />
<br />
"This should be in a museum!" — ''Banana Jones''<br />
<br />
"Hey Mister! Why not use reactive-banana as a smartphone app to brush your teeth?" — ''Tommy "Banana" Johnson''<br />
<br />
== Releases and Resources ==<br />
* Download and installation from Hackage<br />
** {{HackagePackage|id=reactive-banana}} - the FRP library itself<br />
** {{HackagePackage|id=reactive-banana-sdl}} - binding to the [[SDL]] library<br />
** {{HackagePackage|id=reactive-banana-wx}} - binding to the [[wxHaskell]] GUI library<br />
<br />
* <span id="documentation">Documentation</span><br />
** [[FRP explanation using reactive-banana | Tutorial: Explanation of FRP using reactive-banana]]<br />
** [http://hackage.haskell.org/package/reactive-banana API reference]<br />
** '''[[/Examples/]]'''<br />
** [http://apfelmus.nfshost.com/blog.html#functional-reactive-programming-frp Developer Blog]<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus] <apfelmus at quantentunnel de><br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/reactive-banana/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=reactive-programming+haskell+frp+reactive-banana Ask on StackOverflow!]<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/develop/reactive-banana reactive-banana] development branch<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/master/reactive-banana-wx reactive-banana-wx] master branch<br />
<br />
== External Links ==<br />
* [https://github.com/bernstein/breakout breakout], a small game<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:User interfaces]]<br />
[[Category:Libraries]]<br />
[[Category:wxHaskell]]<br />
[[Category:Packages]]<br />
[[Category:Robotics]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Threepenny-gui&diff=57488Threepenny-gui2014-01-25T09:56:08Z<p>Apfelmus: /* Gallery */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:right; width:16em; font-size:90%; font-family:serif; border:1px solid grey; padding:1ex;"><br />
<div><br />
Und der Haifisch, der hat Zähne<br><br />
Und die trägt er im Gesicht<br><br />
Und Macheath, der hat ein Messer<br><br />
Doch das Messer sieht man nicht.<br><br />
</div><br />
Bertold Brecht - ''The Threepenny Opera''<br />
</div><br />
''Threepenny-gui'' is a GUI framework that uses the web browser as a display.<br />
<br />
Features include:<br />
* '''Easy installation.''' Everyone has a reasonably modern web browser installed. Just install the library from hackage and you are ready to go. The library is cross-platform.<br />
* '''HTML'''. You have all capabilities of HTML at your disposal when creating user interfaces. This is a blessing, but it can also be a curse, so the library includes a few layout combinators to quickly create user interfaces without the need to deal with the mess that is CSS. A small JavaScript FFI allows you to include JS client libraries.<br />
* [[Functional Reactive Programming]] ('''FRP''') promises to eliminate the spaghetti code that you usually get when using the traditional imperative event-based style for programming user interactions. Threepenny has an FRP library built-in, but its use is completely optional. Employ FRP when it is convenient and fall back to the traditional style when you hit an impasse.<br />
<br />
== What is it not? ==<br />
<br />
As cool as Threepenny may be, it is ...<br />
<br />
* ... not a web front-end. The server is meant to be run from localhost. Latency would be too high to use it as a web app. That said, it's perfectly stuitable for implementing multi-user apps on a local network, see the [https://github.com/HeinrichApfelmus/threepenny-gui/blob/master/src/Chat.hs Chat.hs example].<br />
* ... not a JavaScript or HTML library. It's a GUI framework with a Haskell API and abstracts many aspects of the document object model. While some basic HTML skills are needed, no knowledge of JavaScript is required to use Threepenny, though you can include external client libraries if you really want to.<br />
<br />
If you want to write a web app, have a look at projects like [https://github.com/faylang/fay/wiki Fay], [https://github.com/ghcjs/ghcjs GHCJS] and [https://github.com/valderman/haste-compiler Haste]. That said, the Threepenny API may be ported to some of these projects as well in the future, but that is not the focus right now.<br />
<br />
== Status ==<br />
<br />
The library is still very much in flux, significant API changes are likely in future versions. The goal is make GUI programming as simple as possible, and that just needs some experimentation.<br />
<br />
* 21 November 2013 — Release of threepenny-gui-0.4.0.0<br />
* 7 September 2013 — Release of threepenny-gui-0.3.0.0<br />
<br />
== Gallery ==<br />
<br />
Applications written with Threepenny.<br />
<br />
<table><br />
<tr><br />
<td><br />
[http://fluffynukeit.com/?page_id=535 Daniel Austin's ''FNIStash'']<br />
<br>Editor for [http://en.wikipedia.org/wiki/Torchlight_II Torchlight 2] inventories.<br />
<br>[[Image:Threepenny-gui-fnistash.png|x300px]]<br />
<td><br />
[https://bitbucket.org/duplode/stunts-cartography Daniel Mlot's ''Stunts Cartography Track Viewer'']<br />
<br>Map viewer for the [http://scr.stunts.hu/ Stunts] racing game.<br />
<br>[[Image:Threepenny-gui-stunts.png|x300px]]<br />
<tr><br />
<td><br />
[https://github.com/CarstenKoenig/Holidays2013 Carsten König's holiday project]<br />
<br>Small viewer for the Mandelbrot set.<br />
<br>[[Image:Threepenny-gui-mandelbrot.png|300px]]<br />
<td><br />
[https://github.com/Chaddai/CurveProject Chaddai's ''CurveProject'']<br />
<br>Plotting curves for math teachers.<br />
<br>[[Image:Threepenny-gui-curveproject.jpg|386px]]<br />
</table><br />
<br />
== Releases and Resources ==<br />
* Download on Hackage<br />
** {{HackagePackage|id=threepenny-gui}}<br />
* <span id="documentation">Documentation</span><br />
** [http://hackage.haskell.org/package/threepenny-gui API reference]<br />
** '''[https://github.com/HeinrichApfelmus/threepenny-gui#examples Examples]'''<br />
** [http://apfelmus.nfshost.com/blog.html#gui-programming Developer Blog]<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus] <apfelmus at quantentunnel de><br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/threepenny-gui/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=haskell+threepenny+gui Ask on StackOverflow!]<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/threepenny-gui/tree/develop/ threepenny-gui] development branch<br />
<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:Libraries]]<br />
[[Category:Packages]]<br />
[[Category:User interfaces]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=File:Threepenny-gui-mandelbrot.png&diff=57487File:Threepenny-gui-mandelbrot.png2014-01-25T09:54:34Z<p>Apfelmus: </p>
<hr />
<div></div>Apfelmushttps://wiki.haskell.org/index.php?title=Threepenny-gui&diff=57400Threepenny-gui2014-01-16T14:29:59Z<p>Apfelmus: /* Status */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:right; width:16em; font-size:90%; font-family:serif; border:1px solid grey; padding:1ex;"><br />
<div><br />
Und der Haifisch, der hat Zähne<br><br />
Und die trägt er im Gesicht<br><br />
Und Macheath, der hat ein Messer<br><br />
Doch das Messer sieht man nicht.<br><br />
</div><br />
Bertold Brecht - ''The Threepenny Opera''<br />
</div><br />
''Threepenny-gui'' is a GUI framework that uses the web browser as a display.<br />
<br />
Features include:<br />
* '''Easy installation.''' Everyone has a reasonably modern web browser installed. Just install the library from hackage and you are ready to go. The library is cross-platform.<br />
* '''HTML'''. You have all capabilities of HTML at your disposal when creating user interfaces. This is a blessing, but it can also be a curse, so the library includes a few layout combinators to quickly create user interfaces without the need to deal with the mess that is CSS. A small JavaScript FFI allows you to include JS client libraries.<br />
* [[Functional Reactive Programming]] ('''FRP''') promises to eliminate the spaghetti code that you usually get when using the traditional imperative event-based style for programming user interactions. Threepenny has an FRP library built-in, but its use is completely optional. Employ FRP when it is convenient and fall back to the traditional style when you hit an impasse.<br />
<br />
== What is it not? ==<br />
<br />
As cool as Threepenny may be, it is ...<br />
<br />
* ... not a web front-end. The server is meant to be run from localhost. Latency would be too high to use it as a web app. That said, it's perfectly stuitable for implementing multi-user apps on a local network, see the [https://github.com/HeinrichApfelmus/threepenny-gui/blob/master/src/Chat.hs Chat.hs example].<br />
* ... not a JavaScript or HTML library. It's a GUI framework with a Haskell API and abstracts many aspects of the document object model. While some basic HTML skills are needed, no knowledge of JavaScript is required to use Threepenny, though you can include external client libraries if you really want to.<br />
<br />
If you want to write a web app, have a look at projects like [https://github.com/faylang/fay/wiki Fay], [https://github.com/ghcjs/ghcjs GHCJS] and [https://github.com/valderman/haste-compiler Haste]. That said, the Threepenny API may be ported to some of these projects as well in the future, but that is not the focus right now.<br />
<br />
== Status ==<br />
<br />
The library is still very much in flux, significant API changes are likely in future versions. The goal is make GUI programming as simple as possible, and that just needs some experimentation.<br />
<br />
* 21 November 2013 — Release of threepenny-gui-0.4.0.0<br />
* 7 September 2013 — Release of threepenny-gui-0.3.0.0<br />
<br />
== Gallery ==<br />
<br />
Applications written with Threepenny.<br />
<br />
<table><br />
<tr><br />
<td><br />
[http://fluffynukeit.com/?page_id=535 Daniel Austin's ''FNIStash'']<br />
<br>Editor for [http://en.wikipedia.org/wiki/Torchlight_II Torchlight 2] inventories.<br />
<br>[[Image:Threepenny-gui-fnistash.png|x300px]]<br />
<td><br />
[https://bitbucket.org/duplode/stunts-cartography Daniel Mlot's ''Stunts Cartography Track Viewer'']<br />
<br>Map viewer for the [http://scr.stunts.hu/ Stunts] racing game.<br />
<br>[[Image:Threepenny-gui-stunts.png|x300px]]<br />
<tr><br />
<td><br />
<td><br />
[https://github.com/Chaddai/CurveProject Chaddai's ''CurveProject'']<br />
<br>Plotting curves for math teachers.<br />
<br>[[Image:Threepenny-gui-curveproject.jpg|386px]]<br />
</table><br />
<br />
== Releases and Resources ==<br />
* Download on Hackage<br />
** {{HackagePackage|id=threepenny-gui}}<br />
* <span id="documentation">Documentation</span><br />
** [http://hackage.haskell.org/package/threepenny-gui API reference]<br />
** '''[https://github.com/HeinrichApfelmus/threepenny-gui#examples Examples]'''<br />
** [http://apfelmus.nfshost.com/blog.html#gui-programming Developer Blog]<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus] <apfelmus at quantentunnel de><br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/threepenny-gui/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=haskell+threepenny+gui Ask on StackOverflow!]<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/threepenny-gui/tree/develop/ threepenny-gui] development branch<br />
<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:Libraries]]<br />
[[Category:Packages]]<br />
[[Category:User interfaces]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Reactive-banana&diff=57399Reactive-banana2014-01-16T14:16:41Z<p>Apfelmus: /* Releases and Resources */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:left;"><br />
[[Image:Reactive-Banana-banana.png|Reactive banana displaying trigger-happy <code>Behavior</code>.]]</div><br />
''Reactive-banana'' is a library for [[Functional Reactive Programming]] (FRP).<br />
<br />
Support the project with a small donation: [http://flattr.com/thing/384682/reactive-banana http://api.flattr.com/button/flattr-badge-large.png]<br />
<br />
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.<br />
<br />
The goal of the library is to provide a solid foundation.<br />
* 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.<br />
* 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.<br />
* The library features an '''efficient implementation'''. No more spooky time leaks, predicting space & time usage should be straightforward.<br />
<br />
[[#feedback|Feedback]] is welcome, I want to hear from you!<br />
<br />
== Status ==<br />
<br />
Current development focuses on dynamic event switching. Examples from game programming and computer music are planned.<br />
<br />
* 02 August 2013: Initial release of reactive-banana-threepenny. Binds to the threepenny-gui GUI library.<br />
* 26 August 2012: reactive-banana 0.7.0.0 released. Features dynamic event switching.<br />
* 15 May 2012: reactive-banana 0.6.0.0 released.<br />
* 25 March 2012: reactive-banana 0.5.0.0 released.<br />
* 24 October 2011: reactive-banana 0.4.3.0 released.<br />
* 26 September 2011: Added some more examples, reactive-banana 0.4.2.0 released.<br />
* 14 July 2011: Implemented many examples, reactive-banana 0.4.1.0 released.<br />
* 22 June 2011: reactive-banana 0.3.0.0 released<br />
* 28 April 2011: reactive-banana 0.2.0.0 released<br />
<br />
== Fake Testimonials ==<br />
<br />
"In the programming-language world, one rule of survival is simple: dance or die. This library makes dancing easy." – ''Simon Banana Jones''<br />
<br />
"About the use of language: it is impossible to sharpen a pencil with a blunt axe. You should try reactive-banana instead." — ''Event Dijkstra''<br />
<br />
"When I need a <code>bullet</code> event, I can just trigger it." — ''Billy the Reactive Banana''<br />
<br />
"This should be in a museum!" — ''Banana Jones''<br />
<br />
"Hey Mister! Why not use reactive-banana as a smartphone app to brush your teeth?" — ''Tommy "Banana" Johnson''<br />
<br />
== Releases and Resources ==<br />
* Download and installation from Hackage<br />
** {{HackagePackage|id=reactive-banana}} - the FRP library itself<br />
** {{HackagePackage|id=reactive-banana-sdl}} - binding to the [[SDL]] library<br />
** {{HackagePackage|id=reactive-banana-threepenny}} - binding to the {{HackagePackage|id=threepenny-gui}} GUI library<br />
** {{HackagePackage|id=reactive-banana-wx}} - binding to the [[wxHaskell]] GUI library<br />
<br />
* <span id="documentation">Documentation</span><br />
** [[FRP explanation using reactive-banana | Tutorial: Explanation of FRP using reactive-banana]]<br />
** [http://hackage.haskell.org/package/reactive-banana API reference]<br />
** '''[[/Examples/]]'''<br />
** [http://apfelmus.nfshost.com/blog.html#functional-reactive-programming-frp Developer Blog]<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus] <apfelmus at quantentunnel de><br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/reactive-banana/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=reactive-programming+haskell+frp+reactive-banana Ask on StackOverflow!]<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/develop/reactive-banana reactive-banana] development branch<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/master/reactive-banana-threepenny reactive-banana-threepenny] master branch<br />
<br />
== External Links ==<br />
* [https://github.com/bernstein/breakout breakout], a small game<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:User interfaces]]<br />
[[Category:Libraries]]<br />
[[Category:wxHaskell]]<br />
[[Category:Packages]]<br />
[[Category:Robotics]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Reactive-banana&diff=57398Reactive-banana2014-01-16T14:13:38Z<p>Apfelmus: /* What is it? */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:left;"><br />
[[Image:Reactive-Banana-banana.png|Reactive banana displaying trigger-happy <code>Behavior</code>.]]</div><br />
''Reactive-banana'' is a library for [[Functional Reactive Programming]] (FRP).<br />
<br />
Support the project with a small donation: [http://flattr.com/thing/384682/reactive-banana http://api.flattr.com/button/flattr-badge-large.png]<br />
<br />
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.<br />
<br />
The goal of the library is to provide a solid foundation.<br />
* 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.<br />
* 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.<br />
* The library features an '''efficient implementation'''. No more spooky time leaks, predicting space & time usage should be straightforward.<br />
<br />
[[#feedback|Feedback]] is welcome, I want to hear from you!<br />
<br />
== Status ==<br />
<br />
Current development focuses on dynamic event switching. Examples from game programming and computer music are planned.<br />
<br />
* 02 August 2013: Initial release of reactive-banana-threepenny. Binds to the threepenny-gui GUI library.<br />
* 26 August 2012: reactive-banana 0.7.0.0 released. Features dynamic event switching.<br />
* 15 May 2012: reactive-banana 0.6.0.0 released.<br />
* 25 March 2012: reactive-banana 0.5.0.0 released.<br />
* 24 October 2011: reactive-banana 0.4.3.0 released.<br />
* 26 September 2011: Added some more examples, reactive-banana 0.4.2.0 released.<br />
* 14 July 2011: Implemented many examples, reactive-banana 0.4.1.0 released.<br />
* 22 June 2011: reactive-banana 0.3.0.0 released<br />
* 28 April 2011: reactive-banana 0.2.0.0 released<br />
<br />
== Fake Testimonials ==<br />
<br />
"In the programming-language world, one rule of survival is simple: dance or die. This library makes dancing easy." – ''Simon Banana Jones''<br />
<br />
"About the use of language: it is impossible to sharpen a pencil with a blunt axe. You should try reactive-banana instead." — ''Event Dijkstra''<br />
<br />
"When I need a <code>bullet</code> event, I can just trigger it." — ''Billy the Reactive Banana''<br />
<br />
"This should be in a museum!" — ''Banana Jones''<br />
<br />
"Hey Mister! Why not use reactive-banana as a smartphone app to brush your teeth?" — ''Tommy "Banana" Johnson''<br />
<br />
== Releases and Resources ==<br />
* Download on Hackage<br />
** {{HackagePackage|id=reactive-banana}} - the FRP library itself<br />
** {{HackagePackage|id=reactive-banana-sdl}} - binding to the [[SDL]] library<br />
** {{HackagePackage|id=reactive-banana-threepenny}} - binding to the {{HackagePackage|id=threepenny-gui}} GUI library<br />
** {{HackagePackage|id=reactive-banana-wx}} - binding to the [[wxHaskell]] GUI library<br />
<br />
* <span id="documentation">Documentation</span><br />
** [[FRP explanation using reactive-banana | Tutorial: Explanation of FRP using reactive-banana]]<br />
** [http://hackage.haskell.org/package/reactive-banana API reference]<br />
** '''[[/Examples/]]'''<br />
** [http://apfelmus.nfshost.com/blog.html#functional-reactive-programming-frp Developer Blog]<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus] <apfelmus at quantentunnel de><br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/reactive-banana/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=reactive-programming+haskell+frp+reactive-banana Ask on StackOverflow!]<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/develop/reactive-banana reactive-banana] development branch<br />
** [https://github.com/HeinrichApfelmus/reactive-banana/tree/master/reactive-banana-threepenny reactive-banana-threepenny] master branch<br />
<br />
== External Links ==<br />
* [https://github.com/bernstein/breakout breakout], a small game<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:User interfaces]]<br />
[[Category:Libraries]]<br />
[[Category:wxHaskell]]<br />
[[Category:Packages]]<br />
[[Category:Robotics]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Threepenny-gui&diff=57370Threepenny-gui2014-01-01T08:51:52Z<p>Apfelmus: /* Releases and Resources */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:right; width:16em; font-size:90%; font-family:serif; border:1px solid grey; padding:1ex;"><br />
<div><br />
Und der Haifisch, der hat Zähne<br><br />
Und die trägt er im Gesicht<br><br />
Und Macheath, der hat ein Messer<br><br />
Doch das Messer sieht man nicht.<br><br />
</div><br />
Bertold Brecht - ''The Threepenny Opera''<br />
</div><br />
''Threepenny-gui'' is a GUI framework that uses the web browser as a display.<br />
<br />
Features include:<br />
* '''Easy installation.''' Everyone has a reasonably modern web browser installed. Just install the library from hackage and you are ready to go. The library is cross-platform.<br />
* '''HTML'''. You have all capabilities of HTML at your disposal when creating user interfaces. This is a blessing, but it can also be a curse, so the library includes a few layout combinators to quickly create user interfaces without the need to deal with the mess that is CSS. A small JavaScript FFI allows you to include JS client libraries.<br />
* [[Functional Reactive Programming]] ('''FRP''') promises to eliminate the spaghetti code that you usually get when using the traditional imperative event-based style for programming user interactions. Threepenny has an FRP library built-in, but its use is completely optional. Employ FRP when it is convenient and fall back to the traditional style when you hit an impasse.<br />
<br />
== What is it not? ==<br />
<br />
As cool as Threepenny may be, it is ...<br />
<br />
* ... not a web front-end. The server is meant to be run from localhost. Latency would be too high to use it as a web app. That said, it's perfectly stuitable for implementing multi-user apps on a local network, see the [https://github.com/HeinrichApfelmus/threepenny-gui/blob/master/src/Chat.hs Chat.hs example].<br />
* ... not a JavaScript or HTML library. It's a GUI framework with a Haskell API and abstracts many aspects of the document object model. While some basic HTML skills are needed, no knowledge of JavaScript is required to use Threepenny, though you can include external client libraries if you really want to.<br />
<br />
If you want to write a web app, have a look at projects like [https://github.com/faylang/fay/wiki Fay], [https://github.com/ghcjs/ghcjs GHCJS] and [https://github.com/valderman/haste-compiler Haste]. That said, the Threepenny API may be ported to some of these projects as well in the future, but that is not the focus right now.<br />
<br />
== Status ==<br />
<br />
The library is still very much in flux, significant API changes are likely in future versions. The goal is make GUI programming as simple as possible, and that just needs some experimentation.<br />
<br />
* 7 September 2013 – Release of threepenny-gui-0.3.0.0<br />
<br />
== Gallery ==<br />
<br />
Applications written with Threepenny.<br />
<br />
<table><br />
<tr><br />
<td><br />
[http://fluffynukeit.com/?page_id=535 Daniel Austin's ''FNIStash'']<br />
<br>Editor for [http://en.wikipedia.org/wiki/Torchlight_II Torchlight 2] inventories.<br />
<br>[[Image:Threepenny-gui-fnistash.png|x300px]]<br />
<td><br />
[https://bitbucket.org/duplode/stunts-cartography Daniel Mlot's ''Stunts Cartography Track Viewer'']<br />
<br>Map viewer for the [http://scr.stunts.hu/ Stunts] racing game.<br />
<br>[[Image:Threepenny-gui-stunts.png|x300px]]<br />
<tr><br />
<td><br />
<td><br />
[https://github.com/Chaddai/CurveProject Chaddai's ''CurveProject'']<br />
<br>Plotting curves for math teachers.<br />
<br>[[Image:Threepenny-gui-curveproject.jpg|386px]]<br />
</table><br />
<br />
== Releases and Resources ==<br />
* Download on Hackage<br />
** {{HackagePackage|id=threepenny-gui}}<br />
* <span id="documentation">Documentation</span><br />
** [http://hackage.haskell.org/package/threepenny-gui API reference]<br />
** '''[https://github.com/HeinrichApfelmus/threepenny-gui#examples Examples]'''<br />
** [http://apfelmus.nfshost.com/blog.html#gui-programming Developer Blog]<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus] <apfelmus at quantentunnel de><br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/threepenny-gui/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
** Questions? [http://stackoverflow.com/questions/ask?tags=haskell+threepenny+gui Ask on StackOverflow!]<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/threepenny-gui/tree/develop/ threepenny-gui] development branch<br />
<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:Libraries]]<br />
[[Category:Packages]]<br />
[[Category:User interfaces]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Operational&diff=57168Operational2013-12-04T14:28:15Z<p>Apfelmus: /* Releases and Resources */</p>
<hr />
<div>== What is it? ==<br />
<br />
The ''operational'' library makes it easy to implement monads with tricky control flow.<br />
<br />
This is very useful for: writing web applications in a sequential style, programming games with a uniform interface for human and AI players and easy replay, implementing fast parser monads, designing monadic DSLs, etc.<br />
<br />
For instance, imagine that you want to write a web application where the user is guided through a sequence of tasks ("wizard"). To structure your application, you can use a custom monad that supports an instruction <code>askUserInput :: CustomMonad UserInput</code>. This command sends a web form to the user and returns a result when he submits the form. However, you don't want your server to block while waiting for the user, so you have to suspend the computation and resume it at some later point. Sounds tricky to implement? This library makes it easy.<br />
<br />
The idea is to identify a set of primitive instructions and to specify their operational semantics. Then, the library makes sure that the monad laws hold automatically. In the web application example, the primitive instruction would be <code>AskUserInput</code>.<br />
<br />
Any monad can be implemented in this way. Ditto for monad transformers.<br />
<br />
A thorough introduction to the ideas behind this library is given in [http://apfelmus.nfshost.com/articles/operational-monad.html "The Operational Monad Tutorial"], published in [http://themonadreader.wordpress.com/2010/01/26/issue-15/ Issue 15 of the Monad.Reader].<br />
<br />
== Releases and Resources ==<br />
<br />
* Download<br />
** {{HackagePackage|id=operational}} - latest version on hackage<br />
** [https://github.com/HeinrichApfelmus/operational source code] on github<br />
* Documentation<br />
** [http://themonadreader.wordpress.com/2010/01/26/issue-15/ The Operational Monad Tutorial] - Introductory document explaining the concept.<br />
** [https://github.com/HeinrichApfelmus/operational/tree/master/doc Library documentation] - How to use the libary proper; documents changes with respect to the tutorial.<br />
** [http://hackage.haskell.org/package/operational/ API reference] on hackage.<br />
** '''[https://github.com/HeinrichApfelmus/operational/tree/master/doc/examples#readme Example code]''' - Extensive collection of working code examples.<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus] <apfelmus at quantentunnel de><br />
** [https://github.com/HeinrichApfelmus/operational/issues?sort=created&direction=desc&state=open Issue Tracker]<br />
** [http://stackoverflow.com/questions/ask?tags=monads+free-monad+haskell Ask a question on StackOverflow]<br />
<br />
<br />
[[Category:Libraries]]<br />
[[Category:Monad]]<br />
[[Category:Packages]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Operational&diff=57167Operational2013-12-04T13:22:28Z<p>Apfelmus: /* Releases and Resources */</p>
<hr />
<div>== What is it? ==<br />
<br />
The ''operational'' library makes it easy to implement monads with tricky control flow.<br />
<br />
This is very useful for: writing web applications in a sequential style, programming games with a uniform interface for human and AI players and easy replay, implementing fast parser monads, designing monadic DSLs, etc.<br />
<br />
For instance, imagine that you want to write a web application where the user is guided through a sequence of tasks ("wizard"). To structure your application, you can use a custom monad that supports an instruction <code>askUserInput :: CustomMonad UserInput</code>. This command sends a web form to the user and returns a result when he submits the form. However, you don't want your server to block while waiting for the user, so you have to suspend the computation and resume it at some later point. Sounds tricky to implement? This library makes it easy.<br />
<br />
The idea is to identify a set of primitive instructions and to specify their operational semantics. Then, the library makes sure that the monad laws hold automatically. In the web application example, the primitive instruction would be <code>AskUserInput</code>.<br />
<br />
Any monad can be implemented in this way. Ditto for monad transformers.<br />
<br />
A thorough introduction to the ideas behind this library is given in [http://apfelmus.nfshost.com/articles/operational-monad.html "The Operational Monad Tutorial"], published in [http://themonadreader.wordpress.com/2010/01/26/issue-15/ Issue 15 of the Monad.Reader].<br />
<br />
== Releases and Resources ==<br />
<br />
* Download<br />
** {{HackagePackage|id=operational}} - latest version on hackage<br />
** [https://github.com/HeinrichApfelmus/operational source code] on github<br />
* Documentation<br />
** [http://themonadreader.wordpress.com/2010/01/26/issue-15/ The Operational Monad Tutorial] - Introductory document explaining the concept.<br />
** [http://heinrichapfelmus.github.com/operational/Documentation.html Library documentation] - How to use the libary proper; documents changes with respect to the tutorial.<br />
** [http://hackage.haskell.org/package/operational/ API reference] on hackage.<br />
** '''[https://github.com/HeinrichApfelmus/operational/tree/master/doc/examples#readme Example code]''' - Collection of working examples.<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus] <apfelmus at quantentunnel de><br />
** [https://github.com/HeinrichApfelmus/operational/issues?sort=created&direction=desc&state=open Issue Tracker]<br />
** [http://stackoverflow.com/questions/ask?tags=monads+free-monad+haskell Ask a question on StackOverflow]<br />
<br />
<br />
[[Category:Libraries]]<br />
[[Category:Monad]]<br />
[[Category:Packages]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=Threepenny-gui&diff=57039Threepenny-gui2013-10-28T11:53:05Z<p>Apfelmus: /* Gallery */</p>
<hr />
<div>== What is it? ==<br />
<br />
<div style="float:right; width:16em; font-size:90%; font-family:serif; border:1px solid grey; padding:1ex;"><br />
<div><br />
Und der Haifisch, der hat Zähne<br><br />
Und die trägt er im Gesicht<br><br />
Und Macheath, der hat ein Messer<br><br />
Doch das Messer sieht man nicht.<br><br />
</div><br />
Bertold Brecht - ''The Threepenny Opera''<br />
</div><br />
''Threepenny-gui'' is a GUI framework that uses the web browser as a display.<br />
<br />
Features include:<br />
* '''Easy installation.''' Everyone has a reasonably modern web browser installed. Just install the library from hackage and you are ready to go. The library is cross-platform.<br />
* '''HTML'''. You have all capabilities of HTML at your disposal when creating user interfaces. This is a blessing, but it can also be a curse, so the library includes a few layout combinators to quickly create user interfaces without the need to deal with the mess that is CSS. A small JavaScript FFI allows you to include JS client libraries.<br />
* [[Functional Reactive Programming]] ('''FRP''') promises to eliminate the spaghetti code that you usually get when using the traditional imperative event-based style for programming user interactions. Threepenny has an FRP library built-in, but its use is completely optional. Employ FRP when it is convenient and fall back to the traditional style when you hit an impasse.<br />
<br />
== What is it not? ==<br />
<br />
As cool as Threepenny may be, it is ...<br />
<br />
* ... not a web front-end. The server is meant to be run from localhost. Latency would be too high to use it as a web app. That said, it's perfectly stuitable for implementing multi-user apps on a local network, see the [https://github.com/HeinrichApfelmus/threepenny-gui/blob/master/src/Chat.hs Chat.hs example].<br />
* ... not a JavaScript or HTML library. It's a GUI framework with a Haskell API and abstracts many aspects of the document object model. While some basic HTML skills are needed, no knowledge of JavaScript is required to use Threepenny, though you can include external client libraries if you really want to.<br />
<br />
If you want to write a web app, have a look at projects like [https://github.com/faylang/fay/wiki Fay], [https://github.com/ghcjs/ghcjs GHCJS] and [https://github.com/valderman/haste-compiler Haste]. That said, the Threepenny API may be ported to some of these projects as well in the future, but that is not the focus right now.<br />
<br />
== Status ==<br />
<br />
The library is still very much in flux, significant API changes are likely in future versions. The goal is make GUI programming as simple as possible, and that just needs some experimentation.<br />
<br />
* 7 September 2013 – Release of threepenny-gui-0.3.0.0<br />
<br />
== Gallery ==<br />
<br />
Applications written with Threepenny.<br />
<br />
<table><br />
<tr><br />
<td><br />
[http://fluffynukeit.com/?page_id=535 Daniel Austin's ''FNIStash'']<br />
<br>Editor for [http://en.wikipedia.org/wiki/Torchlight_II Torchlight 2] inventories.<br />
<br>[[Image:Threepenny-gui-fnistash.png|x300px]]<br />
<td><br />
[https://bitbucket.org/duplode/stunts-cartography Daniel Mlot's ''Stunts Cartography Track Viewer'']<br />
<br>Map viewer for the [http://scr.stunts.hu/ Stunts] racing game.<br />
<br>[[Image:Threepenny-gui-stunts.png|x300px]]<br />
<tr><br />
<td><br />
<td><br />
[https://github.com/Chaddai/CurveProject Chaddai's ''CurveProject'']<br />
<br>Plotting curves for math teachers.<br />
<br>[[Image:Threepenny-gui-curveproject.jpg|386px]]<br />
</table><br />
<br />
== Releases and Resources ==<br />
* Download on Hackage<br />
** {{HackagePackage|id=threepenny-gui}}<br />
* <span id="documentation">Documentation</span><br />
** [http://hackage.haskell.org/package/threepenny-gui API reference]<br />
** '''[https://github.com/HeinrichApfelmus/threepenny-gui#examples Examples]'''<br />
** [http://apfelmus.nfshost.com/blog.html#gui-programming Developer Blog]<br />
* <span id="feedback">Feedback</span> and Contact<br />
** Maintainer: [http://apfelmus.nfshost.com/ Heinrich Apfelmus] <apfelmus at quantentunnel de><br />
** Bugs and feature requests? [https://github.com/HeinrichApfelmus/threepenny-gui/issues?sort=created&direction=desc&state=open Issue Tracker!]<br />
* Source code on github<br />
** [https://github.com/HeinrichApfelmus/threepenny-gui/tree/develop/ threepenny-gui] development branch<br />
<br />
<br />
<br />
[[Category:FRP]]<br />
[[Category:Libraries]]<br />
[[Category:Packages]]<br />
[[Category:User interfaces]]</div>Apfelmushttps://wiki.haskell.org/index.php?title=File:Threepenny-gui-curveproject.jpg&diff=57038File:Threepenny-gui-curveproject.jpg2013-10-28T11:47:50Z<p>Apfelmus: </p>
<hr />
<div></div>Apfelmushttps://wiki.haskell.org/index.php?title=Reactive-banana/Examples&diff=56854Reactive-banana/Examples2013-09-16T17:16:26Z<p>Apfelmus: /* GUI Examples - More elaborate */</p>
<hr />
<div>Examples for the reactive-banana library.<br />
<br />
== Core Examples ==<br />
<br />
; [https://github.com/HeinrichApfelmus/reactive-banana/blob/master/reactive-banana/doc/examples/SlotMachine.hs SlotMachine.hs]<br />
: Mainly demonstrates how to set up an event network with your own event loop. Also demonstrates the FRP functionality.<br />
; [https://github.com/HeinrichApfelmus/reactive-banana/blob/master/reactive-banana/doc/examples/ActuatePause.hs ActuatePause.hs]<br />
: Demonstrates how to set up an event network with your own event loop and how to pause or resume it.<br />
<br />
== GUI Examples - Very simple ==<br />
<br />
; [https://github.com/HeinrichApfelmus/reactive-banana/blob/master/reactive-banana-threepenny/src/Arithmetic.hs Arithmetic.hs]<br />
: Minimalistic calculator that can add two numbers. Demonstrates how to read values from text entries.<br />
:[[Image:Reactive-banana-Arithmetic.png]]<br />
<br />
; [https://github.com/HeinrichApfelmus/reactive-banana/blob/master/reactive-banana-threepenny/src/Counter.hs Counter.hs]<br />
: A simple counter that can be manipulated with two buttons "Up" or "Down". Demonstrates how to get events from button clicks and how to accumulate values using the <code>accumB</code> function.<br />
:[[Image:Reactive-banana-Counter.png]]<br />
<br />
; [https://github.com/HeinrichApfelmus/reactive-banana/blob/master/reactive-banana-threepenny/src/NetMonitor.hs NetMonitor.hs]<br />
: Minimalistic application that displays network statistics in real time. Demonstrates the <code>fromPoll</code> function.<br />
:[[Image:Reactive-banana-NetMonitor.png]]<br />
<br />
; <span id="CurrencyConverter">[https://github.com/HeinrichApfelmus/reactive-banana/blob/master/reactive-banana-threepenny/src/CurrencyConverter.hs CurrencyConverter.hs]<br />
: Simple currency converter. Reads and writes values to text entry widgets in real-time. Demonstrates bidirectional controls.<br />
:[[Image:Reactive-banana-CurrencyConverter.png]]<br />
<br />
; <span id="twoCounters">[https://github.com/HeinrichApfelmus/reactive-banana/blob/master/reactive-banana-threepenny/src/TwoCounters.hs TwoCounters.hs]<br />
: Two simple counters. There is only one pair of buttons "Up" or "Down", the button "Switch Counters" allows you to specify which counter should be affected.<br />
:[[Image:Reactive-banana-TwoCounters.png]]<br />
<br />
== GUI Examples - More elaborate ==<br />
<br />
; <span id="animation">[https://github.com/HeinrichApfelmus/reactive-banana/blob/master/reactive-banana-threepenny/src/Animation.hs Animation.hs]</span><br />
: A small interactive animation. The sprite follows the mouse pointer.<br />
:[[Image:Reactive-banana-Animation.png]]<br />
<br />
; <span id="asteroids">[https://github.com/HeinrichApfelmus/reactive-banana/blob/master/reactive-banana-threepenny/src/Asteroids.hs Asteroids.hs]</span><br />
: Port of the [[wxAsteroids]] example.<br />
: [[Image:Reactive-banana-Asteroids.png]]<br />
<br />
; <span id="bartab">[https://github.com/HeinrichApfelmus/reactive-banana/blob/master/reactive-banana-threepenny/src/BarTab.hs BarTab.hs]</span><br />
: Add all numbers on the tab. Demonstrates how to dynamically create widgets and <code>Behavior</code>s.<br />
:[[Image:Reactive-banana-BarTab.png]]<br />
<br />
; <span id="crud">[https://github.com/HeinrichApfelmus/reactive-banana/blob/master/reactive-banana-threepenny/src/CRUD.hs CRUD.hs]</span><br />
: A toy CRUD (Create/Read/Update/Destroy) application. The code is quite pleasant. Unfortunately, bidirectional controls are still hard to describe, I have left this in a somewhat buggy state. Future updates will rectify this.<br />
:[[Image:Reactive-banana-CRUD1.png]] [[Image:Reactive-banana-CRUD2.png]]<br />
<br />
; [https://github.com/HeinrichApfelmus/reactive-banana/blob/master/reactive-banana-threepenny/src/TicTacToe.hs TicTacToe.hs]<br />
: A version of TicTacToe. Based on a version by Gideon Sireling.<br />
:[[Image:Reactive-banana-TicTacToe.png]]<br />
<br />
; <span id="wave">[https://github.com/HeinrichApfelmus/reactive-banana/blob/master/reactive-banana-threepenny/src/Wave.hs Wave.hs]</span><br />
: A wave-like pattern. Not the most beautiful code, but it demonstrates that you can generate timed events.<br />
:[[Image:Reactive-banana-Wave.png]]</div>Apfelmus