https://wiki.haskell.org/api.php?action=feedcontributions&user=GeroldMeisinger&feedformat=atomHaskellWiki - User contributions [en]2024-03-29T12:26:48ZUser contributionsMediaWiki 1.35.5https://wiki.haskell.org/index.php?title=Yampa&diff=64781Yampa2021-10-13T13:19:41Z<p>GeroldMeisinger: /* Introduction */</p>
<hr />
<div>Yampa is a domain-specific embedded language for the programming of hybrid (discrete and continuous time) systems using the concepts of [[Functional Reactive Programming]] (FRP). Yampa is structured using [[Arrow]]s, which greatly reduce the chance of introducing space- and time-leaks into reactive, time-varying systems.<br />
<br />
Yampa was originally developed by the [http://haskell.cs.yale.edu/ Yale Haskell Group] based on the original idea of [http://www.conal.net Conal Elliott's] [http://conal.net/fran/ Fran].<br />
<br />
Hackage: {{HackagePackage|id=Yampa}}<br />
<br />
== Introduction ==<br />
<br />
* [http://www.cs.nott.ac.uk/~psznhn/FoPAD2007/Talks/nhn-FoPAD2007.pdf Henrik Nilsson - A Brief Introduction to Functional Reactive Programming and Yampa]<br />
* [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/ Henrik Nilsson - ITU-FRP2010]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture01.pdf ITU-FRP2010 01]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture02.pdf ITU-FRP2010 02]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture03.pdf ITU-FRP2010 03]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture04.pdf ITU-FRP2010 04]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture05.pdf ITU-FRP2010 05]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture06.pdf ITU-FRP2010 06]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture07.pdf ITU-FRP2010 07]<br />
* [http://www.cs.yale.edu/homes/hudak/CS429F04/LectureSlides/YampaForCs429.ppt Paul Hudak - Yampa, Arrows, and Robots]<br />
* Yampa tutorials by Gerold Meisinger<br />
** [https://lambdor-net.readthedocs.io/learn.html Learning Yampa and Functional Reactive Programming] [https://web.archive.org/web/20100823084116/http://lambdor.net/?p=44 (archived)]<br />
** [https://lambdor-net.readthedocs.io/embed.html Running primitive signal functions in Yampa] [https://web.archive.org/web/20100822210238/http://lambdor.net/?p=34 (archived)]<br />
** [https://lambdor-net.readthedocs.io/sdlstub.html Yampa/SDL program stub] [https://web.archive.org/web/20100823084125/http://lambdor.net/?p=59 (archived)]<br />
** [https://lambdor-net.readthedocs.io/dataflow.html Dataflow diagram of Yampa reactimate] [https://web.archive.org/web/20100822074057/http://lambdor.net/?p=117 (archived)]<br />
** [https://lambdor-net.readthedocs.io/activity.html Activity diagram of Yampa reactimate] [https://web.archive.org/web/20100822074010/http://lambdor.net/?p=113 (archived)]<br />
** [https://web.archive.org/web/20101008051015/http://lambdor.net/?p=209 Diagrams of Yampa switches]<br />
* [http://yampa-book.rtfd.io Yampa book - Tutorial series for BearRiver Yampa]<br />
* library reference sheet: [https://svn.code.sf.net/p/frvr/code/AFRP/trunk/src/foo.ps ps], [http://lambdor.net/wp-content/uploads/2010/12/AFRP-Reference.pdf pdf]<br />
* Videos<br />
** [https://vimeo.com/6632457 Safe Functional Reactive Programming through Dependent Types]<br />
** [https://vimeo.com/6652662 Causal Commutative Arrows and Their Optimization]<br />
** [https://www.youtube.com/watch?v=xtmo6Bmfahc Euterpea: From signals to symphonies]<br />
<br />
== Primitive signal functions ==<br />
<br />
[[Image:Yampa signal functions.png|768px]]<br />
<br />
(download original [[:Image:Yampa signal functions.svg]])<br />
<br />
== Switches ==<br />
<br />
[https://www.reddit.com/r/haskell/comments/3jqfh7/comment/curnksm/?utm_source=reddit&utm_medium=web2x&context=3 Reddit - How to read Yampa diagram?]<br />
<br />
* [[Yampa/switch|switch]]<br />
* [[Yampa/rSwitch|rSwitch]]<br />
* [[Yampa/kSwitch|kSwitch]]<br />
* [[Yampa/pSwitchB|pSwitchB]]<br />
* [[Yampa/pSwitch|pSwitch]]<br />
* [[Yampa/rpSwitchB|rpSwitchB]]<br />
* [[Yampa/rpSwitch|rpSwitch]]<br />
<br />
Each switch comes in two different flavors:<br />
# ''immediate'': switch to the new behaviour immediately and also calculate the return value based on the new behaviour.<br />
# ''delayed'': return the value based on the old behaviour, but use the new behaviour afterwards. To use delayed switch prefix the switching functions with the letter 'd', f.e. 'drpSwitchB'.<br />
<br />
== Reactimation ==<br />
<br />
* [[Yampa/reactimate|reactimate]]<br />
* [[Yampa/game_engine|Game engine]]<br />
<br />
== External Links ==<br />
<br />
* [http://mailman.cs.yale.edu/mailman/listinfo/yampa-users Yampa-Users mailing list] - Yampa-related comments, questions, discussions, and announcements. You can also send bug reports to [mailto:yampa-bugs@cs.yale.edu yampa-bugs@cs.yale.edu].<br />
* [https://wiki.haskell.org/IRC_channel#Projects_using_haskell #yampa] - This is Yampa IRC Channel, please refer to [https://wiki.haskell.org/IRC_channel#Getting_there Getting there] on how to join the channel.<br />
* [https://www.youtube.com/watch?feature=player_detailpage&v=T7XwTolu9YI Yampy Cube] - a live coding presentation with Yampa by Konstantin Zudov at Helsinki FRP Meetup May 6, 2015. [https://github.com/helsinki-frp/yampy-cube (Source code on Github)]<br />
* [http://db.inf.uni-tuebingen.de/team/GeorgeGiorgidze.html George Giorgidze] created YampaSynth, a modular music synthesizer written in Haskell and using Yampa.<br />
* [http://www.thev.net/PaulLiu/#publications Hai (Paul) Liu papers and slides]<br />
* [http://lambdor.net Blog about Yampa] - introduction tutorials and diagrams<br />
* [https://web.archive.org/web/20140820094516/http://blog.edwardamsden.com/2011/03/demonstrating-time-leak-in-arrowized.html Demonstrating a Time Leak in Arrowized FRP] (Web archive)<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2011-April/000409.html answer]<br />
* [https://www.youtube.com/results?search_query=yampa+haskell An overview of Yampa video clips on YouTube]<br />
<br />
== Known users ==<br />
<br />
[https://www.google.com/search?hl=en&q=yampa%20site%3Ahackage.haskell.org%2Fpackage&aqi=g10 search Hackage]<br />
<br />
* {{HackagePackage|id=YampaSynth}} - is a software synthesizer implemented in Haskell using Yampa. It contains a framework of sound generating and sound shaping modules (e.g. oscillator, amplifier, mixer, envelope generator, filter, etc.) and example applications.<br />
* [http://www.haskell.org/haskellwiki/Frag Frag]; a simple Quake 3 clone, using a very early version of Yampa called arrowized functional reactive programming (AFRP)<br />
* {{HackagePackage|id=SpaceInvaders}}; a video game, demonstrating the usage of Yampa<br />
* {{HackagePackage|id=cuboid}}; a small puzzle game<br />
* {{HackagePackage|id=Haskelloids}}; asteroids clone<br />
* [http://haskell.cs.yale.edu/nettle/ Nettle] - Programming Network Routers<br />
* [http://haskell.cs.yale.edu/euterpea/ Euterpea] - computer music development (also uses [[CCA]])<br />
* {{HackagePackage|id=YFrob}}; robot simulation<br />
* [https://github.com/ivanperez-keera/haskanoid Haskanoid] A breakout-like videogame with SDL graphics and sound that can optionally be controlled with a Wiimote or a Kinect.<br />
* [https://play.google.com/store/apps/details?id=uk.co.keera.games.magiccookies&hl=en Magic Cookies!] An iOS/Android board game implemented in Haskell using Yampa and SDL2.<br />
<br />
[https://github.com/search?q=yampa&repo=&langOverride=&start_value=1&type=Everything&language=Haskell search Github]<br />
<br />
* [https://github.com/harley/hamball Hamball]<br />
* [https://github.com/werk/YampaShooter YampaShooter]<br />
<br />
== Known forks ==<br />
<br />
* [https://github.com/ony/Yampa-core Yampa-core]<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2012-May/ related discussion]<br />
* [https://github.com/eamsden/Animas Animas]<br />
** code cleanup<br />
* [http://imve.informatik.uni-hamburg.de/projects/FRVR Functional Reactive Virtual Reality]<br />
** [https://svn.code.sf.net/p/frvr/code/AFRP/trunk/ FRVR source code]<br />
** [http://imve.informatik.uni-hamburg.de/projects/DIVE DIVE project]<br />
<br />
[[Category:FRP]]<br />
[[Category:Arrow]]<br />
[[Category:Music]]<br />
[[Category:Robotics]]</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa&diff=64780Yampa2021-10-13T13:19:18Z<p>GeroldMeisinger: /* Introduction */</p>
<hr />
<div>Yampa is a domain-specific embedded language for the programming of hybrid (discrete and continuous time) systems using the concepts of [[Functional Reactive Programming]] (FRP). Yampa is structured using [[Arrow]]s, which greatly reduce the chance of introducing space- and time-leaks into reactive, time-varying systems.<br />
<br />
Yampa was originally developed by the [http://haskell.cs.yale.edu/ Yale Haskell Group] based on the original idea of [http://www.conal.net Conal Elliott's] [http://conal.net/fran/ Fran].<br />
<br />
Hackage: {{HackagePackage|id=Yampa}}<br />
<br />
== Introduction ==<br />
<br />
* [http://www.cs.nott.ac.uk/~psznhn/FoPAD2007/Talks/nhn-FoPAD2007.pdf Henrik Nilsson - A Brief Introduction to Functional Reactive Programming and Yampa]<br />
* [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/ Henrik Nilsson - ITU-FRP2010]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture01.pdf ITU-FRP2010 01]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture02.pdf ITU-FRP2010 02]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture03.pdf ITU-FRP2010 03]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture04.pdf ITU-FRP2010 04]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture05.pdf ITU-FRP2010 05]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture06.pdf ITU-FRP2010 06]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture07.pdf ITU-FRP2010 07]<br />
* [http://www.cs.yale.edu/homes/hudak/CS429F04/LectureSlides/YampaForCs429.ppt Paul Hudak - Yampa, Arrows, and Robots]<br />
* Yampa tutorials by Gerold Meisinger<br />
** [https://lambdor-net.readthedocs.io/learn.html Learning Yampa and Functional Reactive Programming] ([https://web.archive.org/web/20100823084116/http://lambdor.net/?p=44 (archived)]<br />
** [https://lambdor-net.readthedocs.io/embed.html Running primitive signal functions in Yampa] ([https://web.archive.org/web/20100822210238/http://lambdor.net/?p=34 (archived)]<br />
** [https://lambdor-net.readthedocs.io/sdlstub.html Yampa/SDL program stub] ([https://web.archive.org/web/20100823084125/http://lambdor.net/?p=59 (archived)]<br />
** [https://lambdor-net.readthedocs.io/dataflow.html Dataflow diagram of Yampa reactimate] ([https://web.archive.org/web/20100822074057/http://lambdor.net/?p=117 (archived)]<br />
** [https://lambdor-net.readthedocs.io/activity.html Activity diagram of Yampa reactimate] ([https://web.archive.org/web/20100822074010/http://lambdor.net/?p=113 (archived)]<br />
** [https://web.archive.org/web/20101008051015/http://lambdor.net/?p=209 Diagrams of Yampa switches]<br />
* [http://yampa-book.rtfd.io Yampa book - Tutorial series for BearRiver Yampa]<br />
* library reference sheet: [https://svn.code.sf.net/p/frvr/code/AFRP/trunk/src/foo.ps ps], [http://lambdor.net/wp-content/uploads/2010/12/AFRP-Reference.pdf pdf]<br />
* Videos<br />
** [https://vimeo.com/6632457 Safe Functional Reactive Programming through Dependent Types]<br />
** [https://vimeo.com/6652662 Causal Commutative Arrows and Their Optimization]<br />
** [https://www.youtube.com/watch?v=xtmo6Bmfahc Euterpea: From signals to symphonies]<br />
<br />
== Primitive signal functions ==<br />
<br />
[[Image:Yampa signal functions.png|768px]]<br />
<br />
(download original [[:Image:Yampa signal functions.svg]])<br />
<br />
== Switches ==<br />
<br />
[https://www.reddit.com/r/haskell/comments/3jqfh7/comment/curnksm/?utm_source=reddit&utm_medium=web2x&context=3 Reddit - How to read Yampa diagram?]<br />
<br />
* [[Yampa/switch|switch]]<br />
* [[Yampa/rSwitch|rSwitch]]<br />
* [[Yampa/kSwitch|kSwitch]]<br />
* [[Yampa/pSwitchB|pSwitchB]]<br />
* [[Yampa/pSwitch|pSwitch]]<br />
* [[Yampa/rpSwitchB|rpSwitchB]]<br />
* [[Yampa/rpSwitch|rpSwitch]]<br />
<br />
Each switch comes in two different flavors:<br />
# ''immediate'': switch to the new behaviour immediately and also calculate the return value based on the new behaviour.<br />
# ''delayed'': return the value based on the old behaviour, but use the new behaviour afterwards. To use delayed switch prefix the switching functions with the letter 'd', f.e. 'drpSwitchB'.<br />
<br />
== Reactimation ==<br />
<br />
* [[Yampa/reactimate|reactimate]]<br />
* [[Yampa/game_engine|Game engine]]<br />
<br />
== External Links ==<br />
<br />
* [http://mailman.cs.yale.edu/mailman/listinfo/yampa-users Yampa-Users mailing list] - Yampa-related comments, questions, discussions, and announcements. You can also send bug reports to [mailto:yampa-bugs@cs.yale.edu yampa-bugs@cs.yale.edu].<br />
* [https://wiki.haskell.org/IRC_channel#Projects_using_haskell #yampa] - This is Yampa IRC Channel, please refer to [https://wiki.haskell.org/IRC_channel#Getting_there Getting there] on how to join the channel.<br />
* [https://www.youtube.com/watch?feature=player_detailpage&v=T7XwTolu9YI Yampy Cube] - a live coding presentation with Yampa by Konstantin Zudov at Helsinki FRP Meetup May 6, 2015. [https://github.com/helsinki-frp/yampy-cube (Source code on Github)]<br />
* [http://db.inf.uni-tuebingen.de/team/GeorgeGiorgidze.html George Giorgidze] created YampaSynth, a modular music synthesizer written in Haskell and using Yampa.<br />
* [http://www.thev.net/PaulLiu/#publications Hai (Paul) Liu papers and slides]<br />
* [http://lambdor.net Blog about Yampa] - introduction tutorials and diagrams<br />
* [https://web.archive.org/web/20140820094516/http://blog.edwardamsden.com/2011/03/demonstrating-time-leak-in-arrowized.html Demonstrating a Time Leak in Arrowized FRP] (Web archive)<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2011-April/000409.html answer]<br />
* [https://www.youtube.com/results?search_query=yampa+haskell An overview of Yampa video clips on YouTube]<br />
<br />
== Known users ==<br />
<br />
[https://www.google.com/search?hl=en&q=yampa%20site%3Ahackage.haskell.org%2Fpackage&aqi=g10 search Hackage]<br />
<br />
* {{HackagePackage|id=YampaSynth}} - is a software synthesizer implemented in Haskell using Yampa. It contains a framework of sound generating and sound shaping modules (e.g. oscillator, amplifier, mixer, envelope generator, filter, etc.) and example applications.<br />
* [http://www.haskell.org/haskellwiki/Frag Frag]; a simple Quake 3 clone, using a very early version of Yampa called arrowized functional reactive programming (AFRP)<br />
* {{HackagePackage|id=SpaceInvaders}}; a video game, demonstrating the usage of Yampa<br />
* {{HackagePackage|id=cuboid}}; a small puzzle game<br />
* {{HackagePackage|id=Haskelloids}}; asteroids clone<br />
* [http://haskell.cs.yale.edu/nettle/ Nettle] - Programming Network Routers<br />
* [http://haskell.cs.yale.edu/euterpea/ Euterpea] - computer music development (also uses [[CCA]])<br />
* {{HackagePackage|id=YFrob}}; robot simulation<br />
* [https://github.com/ivanperez-keera/haskanoid Haskanoid] A breakout-like videogame with SDL graphics and sound that can optionally be controlled with a Wiimote or a Kinect.<br />
* [https://play.google.com/store/apps/details?id=uk.co.keera.games.magiccookies&hl=en Magic Cookies!] An iOS/Android board game implemented in Haskell using Yampa and SDL2.<br />
<br />
[https://github.com/search?q=yampa&repo=&langOverride=&start_value=1&type=Everything&language=Haskell search Github]<br />
<br />
* [https://github.com/harley/hamball Hamball]<br />
* [https://github.com/werk/YampaShooter YampaShooter]<br />
<br />
== Known forks ==<br />
<br />
* [https://github.com/ony/Yampa-core Yampa-core]<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2012-May/ related discussion]<br />
* [https://github.com/eamsden/Animas Animas]<br />
** code cleanup<br />
* [http://imve.informatik.uni-hamburg.de/projects/FRVR Functional Reactive Virtual Reality]<br />
** [https://svn.code.sf.net/p/frvr/code/AFRP/trunk/ FRVR source code]<br />
** [http://imve.informatik.uni-hamburg.de/projects/DIVE DIVE project]<br />
<br />
[[Category:FRP]]<br />
[[Category:Arrow]]<br />
[[Category:Music]]<br />
[[Category:Robotics]]</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa&diff=64777Yampa2021-10-10T11:33:11Z<p>GeroldMeisinger: /* Switches */</p>
<hr />
<div>Yampa is a domain-specific embedded language for the programming of hybrid (discrete and continuous time) systems using the concepts of [[Functional Reactive Programming]] (FRP). Yampa is structured using [[Arrow]]s, which greatly reduce the chance of introducing space- and time-leaks into reactive, time-varying systems.<br />
<br />
Yampa was originally developed by the [http://haskell.cs.yale.edu/ Yale Haskell Group] based on the original idea of [http://www.conal.net Conal Elliott's] [http://conal.net/fran/ Fran].<br />
<br />
Hackage: {{HackagePackage|id=Yampa}}<br />
<br />
== Introduction ==<br />
<br />
* [http://www.cs.nott.ac.uk/~psznhn/FoPAD2007/Talks/nhn-FoPAD2007.pdf Henrik Nilsson - A Brief Introduction to Functional Reactive Programming and Yampa]<br />
* [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/ Henrik Nilsson - ITU-FRP2010]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture01.pdf ITU-FRP2010 01]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture02.pdf ITU-FRP2010 02]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture03.pdf ITU-FRP2010 03]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture04.pdf ITU-FRP2010 04]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture05.pdf ITU-FRP2010 05]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture06.pdf ITU-FRP2010 06]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture07.pdf ITU-FRP2010 07]<br />
* [http://www.cs.yale.edu/homes/hudak/CS429F04/LectureSlides/YampaForCs429.ppt Paul Hudak - Yampa, Arrows, and Robots]<br />
* Yampa tutorials by Gerold Meisinger<br />
** [https://web.archive.org/web/20100822210238/http://lambdor.net/?p=34 Running primitive signal functions in Yampa]<br />
** [https://web.archive.org/web/20100823084125/http://lambdor.net/?p=59 Yampa/SDL program stub]<br />
** [https://web.archive.org/web/20100823084116/http://lambdor.net/?p=44 Learning Yampa and Functional Reactive Programming]<br />
** [https://web.archive.org/web/20101008051015/http://lambdor.net/?p=209 Diagrams of Yampa switches]<br />
** [https://web.archive.org/web/20100822074057/http://lambdor.net/?p=117 Dataflow diagram of Yampa reactimate]<br />
** [https://web.archive.org/web/20100822074010/http://lambdor.net/?p=113 Activity diagram of Yampa reactimate]<br />
* [http://yampa-book.rtfd.io Yampa book - Tutorial series for BearRiver Yampa]<br />
* library reference sheet: [https://svn.code.sf.net/p/frvr/code/AFRP/trunk/src/foo.ps ps], [http://lambdor.net/wp-content/uploads/2010/12/AFRP-Reference.pdf pdf]<br />
* Videos<br />
** [https://vimeo.com/6632457 Safe Functional Reactive Programming through Dependent Types]<br />
** [https://vimeo.com/6652662 Causal Commutative Arrows and Their Optimization]<br />
** [https://www.youtube.com/watch?v=xtmo6Bmfahc Euterpea: From signals to symphonies]<br />
<br />
== Primitive signal functions ==<br />
<br />
[[Image:Yampa signal functions.png|768px]]<br />
<br />
(download original [[:Image:Yampa signal functions.svg]])<br />
<br />
== Switches ==<br />
<br />
[https://www.reddit.com/r/haskell/comments/3jqfh7/comment/curnksm/?utm_source=reddit&utm_medium=web2x&context=3 Reddit - How to read Yampa diagram?]<br />
<br />
* [[Yampa/switch|switch]]<br />
* [[Yampa/rSwitch|rSwitch]]<br />
* [[Yampa/kSwitch|kSwitch]]<br />
* [[Yampa/pSwitchB|pSwitchB]]<br />
* [[Yampa/pSwitch|pSwitch]]<br />
* [[Yampa/rpSwitchB|rpSwitchB]]<br />
* [[Yampa/rpSwitch|rpSwitch]]<br />
<br />
Each switch comes in two different flavors:<br />
# ''immediate'': switch to the new behaviour immediately and also calculate the return value based on the new behaviour.<br />
# ''delayed'': return the value based on the old behaviour, but use the new behaviour afterwards. To use delayed switch prefix the switching functions with the letter 'd', f.e. 'drpSwitchB'.<br />
<br />
== Reactimation ==<br />
<br />
* [[Yampa/reactimate|reactimate]]<br />
* [[Yampa/game_engine|Game engine]]<br />
<br />
== External Links ==<br />
<br />
* [http://mailman.cs.yale.edu/mailman/listinfo/yampa-users Yampa-Users mailing list] - Yampa-related comments, questions, discussions, and announcements. You can also send bug reports to [mailto:yampa-bugs@cs.yale.edu yampa-bugs@cs.yale.edu].<br />
* [https://wiki.haskell.org/IRC_channel#Projects_using_haskell #yampa] - This is Yampa IRC Channel, please refer to [https://wiki.haskell.org/IRC_channel#Getting_there Getting there] on how to join the channel.<br />
* [https://www.youtube.com/watch?feature=player_detailpage&v=T7XwTolu9YI Yampy Cube] - a live coding presentation with Yampa by Konstantin Zudov at Helsinki FRP Meetup May 6, 2015. [https://github.com/helsinki-frp/yampy-cube (Source code on Github)]<br />
* [http://db.inf.uni-tuebingen.de/team/GeorgeGiorgidze.html George Giorgidze] created YampaSynth, a modular music synthesizer written in Haskell and using Yampa.<br />
* [http://www.thev.net/PaulLiu/#publications Hai (Paul) Liu papers and slides]<br />
* [http://lambdor.net Blog about Yampa] - introduction tutorials and diagrams<br />
* [https://web.archive.org/web/20140820094516/http://blog.edwardamsden.com/2011/03/demonstrating-time-leak-in-arrowized.html Demonstrating a Time Leak in Arrowized FRP] (Web archive)<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2011-April/000409.html answer]<br />
* [https://www.youtube.com/results?search_query=yampa+haskell An overview of Yampa video clips on YouTube]<br />
<br />
== Known users ==<br />
<br />
[https://www.google.com/search?hl=en&q=yampa%20site%3Ahackage.haskell.org%2Fpackage&aqi=g10 search Hackage]<br />
<br />
* {{HackagePackage|id=YampaSynth}} - is a software synthesizer implemented in Haskell using Yampa. It contains a framework of sound generating and sound shaping modules (e.g. oscillator, amplifier, mixer, envelope generator, filter, etc.) and example applications.<br />
* [http://www.haskell.org/haskellwiki/Frag Frag]; a simple Quake 3 clone, using a very early version of Yampa called arrowized functional reactive programming (AFRP)<br />
* {{HackagePackage|id=SpaceInvaders}}; a video game, demonstrating the usage of Yampa<br />
* {{HackagePackage|id=cuboid}}; a small puzzle game<br />
* {{HackagePackage|id=Haskelloids}}; asteroids clone<br />
* [http://haskell.cs.yale.edu/nettle/ Nettle] - Programming Network Routers<br />
* [http://haskell.cs.yale.edu/euterpea/ Euterpea] - computer music development (also uses [[CCA]])<br />
* {{HackagePackage|id=YFrob}}; robot simulation<br />
* [https://github.com/ivanperez-keera/haskanoid Haskanoid] A breakout-like videogame with SDL graphics and sound that can optionally be controlled with a Wiimote or a Kinect.<br />
* [https://play.google.com/store/apps/details?id=uk.co.keera.games.magiccookies&hl=en Magic Cookies!] An iOS/Android board game implemented in Haskell using Yampa and SDL2.<br />
<br />
[https://github.com/search?q=yampa&repo=&langOverride=&start_value=1&type=Everything&language=Haskell search Github]<br />
<br />
* [https://github.com/harley/hamball Hamball]<br />
* [https://github.com/werk/YampaShooter YampaShooter]<br />
<br />
== Known forks ==<br />
<br />
* [https://github.com/ony/Yampa-core Yampa-core]<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2012-May/ related discussion]<br />
* [https://github.com/eamsden/Animas Animas]<br />
** code cleanup<br />
* [http://imve.informatik.uni-hamburg.de/projects/FRVR Functional Reactive Virtual Reality]<br />
** [https://svn.code.sf.net/p/frvr/code/AFRP/trunk/ FRVR source code]<br />
** [http://imve.informatik.uni-hamburg.de/projects/DIVE DIVE project]<br />
<br />
[[Category:FRP]]<br />
[[Category:Arrow]]<br />
[[Category:Music]]<br />
[[Category:Robotics]]</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=BearRiver&diff=64753BearRiver2021-09-24T13:59:45Z<p>GeroldMeisinger: Redirected page to Yampa</p>
<hr />
<div>#REDIRECT [[Yampa]]</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Dunai&diff=64752Dunai2021-09-24T13:59:33Z<p>GeroldMeisinger: Redirected page to Functional Reactive Programming</p>
<hr />
<div>#REDIRECT [[Functional Reactive Programming]]</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa&diff=64751Yampa2021-09-24T13:57:54Z<p>GeroldMeisinger: /* Introduction */</p>
<hr />
<div>Yampa is a domain-specific embedded language for the programming of hybrid (discrete and continuous time) systems using the concepts of [[Functional Reactive Programming]] (FRP). Yampa is structured using [[Arrow]]s, which greatly reduce the chance of introducing space- and time-leaks into reactive, time-varying systems.<br />
<br />
Yampa was originally developed by the [http://haskell.cs.yale.edu/ Yale Haskell Group] based on the original idea of [http://www.conal.net Conal Elliott's] [http://conal.net/fran/ Fran].<br />
<br />
Hackage: {{HackagePackage|id=Yampa}}<br />
<br />
== Introduction ==<br />
<br />
* [http://www.cs.nott.ac.uk/~psznhn/FoPAD2007/Talks/nhn-FoPAD2007.pdf Henrik Nilsson - A Brief Introduction to Functional Reactive Programming and Yampa]<br />
* [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/ Henrik Nilsson - ITU-FRP2010]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture01.pdf ITU-FRP2010 01]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture02.pdf ITU-FRP2010 02]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture03.pdf ITU-FRP2010 03]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture04.pdf ITU-FRP2010 04]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture05.pdf ITU-FRP2010 05]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture06.pdf ITU-FRP2010 06]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture07.pdf ITU-FRP2010 07]<br />
* [http://www.cs.yale.edu/homes/hudak/CS429F04/LectureSlides/YampaForCs429.ppt Paul Hudak - Yampa, Arrows, and Robots]<br />
* Yampa tutorials by Gerold Meisinger<br />
** [https://web.archive.org/web/20100822210238/http://lambdor.net/?p=34 Running primitive signal functions in Yampa]<br />
** [https://web.archive.org/web/20100823084125/http://lambdor.net/?p=59 Yampa/SDL program stub]<br />
** [https://web.archive.org/web/20100823084116/http://lambdor.net/?p=44 Learning Yampa and Functional Reactive Programming]<br />
** [https://web.archive.org/web/20101008051015/http://lambdor.net/?p=209 Diagrams of Yampa switches]<br />
** [https://web.archive.org/web/20100822074057/http://lambdor.net/?p=117 Dataflow diagram of Yampa reactimate]<br />
** [https://web.archive.org/web/20100822074010/http://lambdor.net/?p=113 Activity diagram of Yampa reactimate]<br />
* [http://yampa-book.rtfd.io Yampa book - Tutorial series for BearRiver Yampa]<br />
* library reference sheet: [https://svn.code.sf.net/p/frvr/code/AFRP/trunk/src/foo.ps ps], [http://lambdor.net/wp-content/uploads/2010/12/AFRP-Reference.pdf pdf]<br />
* Videos<br />
** [https://vimeo.com/6632457 Safe Functional Reactive Programming through Dependent Types]<br />
** [https://vimeo.com/6652662 Causal Commutative Arrows and Their Optimization]<br />
** [https://www.youtube.com/watch?v=xtmo6Bmfahc Euterpea: From signals to symphonies]<br />
<br />
== Primitive signal functions ==<br />
<br />
[[Image:Yampa signal functions.png|768px]]<br />
<br />
(download original [[:Image:Yampa signal functions.svg]])<br />
<br />
== Switches ==<br />
<br />
* [[Yampa/switch|switch]]<br />
* [[Yampa/rSwitch|rSwitch]]<br />
* [[Yampa/kSwitch|kSwitch]]<br />
* [[Yampa/pSwitchB|pSwitchB]]<br />
* [[Yampa/pSwitch|pSwitch]]<br />
* [[Yampa/rpSwitchB|rpSwitchB]]<br />
* [[Yampa/rpSwitch|rpSwitch]]<br />
<br />
Each switch comes in two different flavors:<br />
# ''immediate'': switch to the new behaviour immediately and also calculate the return value based on the new behaviour.<br />
# ''delayed'': return the value based on the old behaviour, but use the new behaviour afterwards. To use delayed switch prefix the switching functions with the letter 'd', f.e. 'drpSwitchB'.<br />
<br />
== Reactimation ==<br />
<br />
* [[Yampa/reactimate|reactimate]]<br />
* [[Yampa/game_engine|Game engine]]<br />
<br />
== External Links ==<br />
<br />
* [http://mailman.cs.yale.edu/mailman/listinfo/yampa-users Yampa-Users mailing list] - Yampa-related comments, questions, discussions, and announcements. You can also send bug reports to [mailto:yampa-bugs@cs.yale.edu yampa-bugs@cs.yale.edu].<br />
* [https://wiki.haskell.org/IRC_channel#Projects_using_haskell #yampa] - This is Yampa IRC Channel, please refer to [https://wiki.haskell.org/IRC_channel#Getting_there Getting there] on how to join the channel.<br />
* [https://www.youtube.com/watch?feature=player_detailpage&v=T7XwTolu9YI Yampy Cube] - a live coding presentation with Yampa by Konstantin Zudov at Helsinki FRP Meetup May 6, 2015. [https://github.com/helsinki-frp/yampy-cube (Source code on Github)]<br />
* [http://db.inf.uni-tuebingen.de/team/GeorgeGiorgidze.html George Giorgidze] created YampaSynth, a modular music synthesizer written in Haskell and using Yampa.<br />
* [http://www.thev.net/PaulLiu/#publications Hai (Paul) Liu papers and slides]<br />
* [http://lambdor.net Blog about Yampa] - introduction tutorials and diagrams<br />
* [https://web.archive.org/web/20140820094516/http://blog.edwardamsden.com/2011/03/demonstrating-time-leak-in-arrowized.html Demonstrating a Time Leak in Arrowized FRP] (Web archive)<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2011-April/000409.html answer]<br />
* [https://www.youtube.com/results?search_query=yampa+haskell An overview of Yampa video clips on YouTube]<br />
<br />
== Known users ==<br />
<br />
[https://www.google.com/search?hl=en&q=yampa%20site%3Ahackage.haskell.org%2Fpackage&aqi=g10 search Hackage]<br />
<br />
* {{HackagePackage|id=YampaSynth}} - is a software synthesizer implemented in Haskell using Yampa. It contains a framework of sound generating and sound shaping modules (e.g. oscillator, amplifier, mixer, envelope generator, filter, etc.) and example applications.<br />
* [http://www.haskell.org/haskellwiki/Frag Frag]; a simple Quake 3 clone, using a very early version of Yampa called arrowized functional reactive programming (AFRP)<br />
* {{HackagePackage|id=SpaceInvaders}}; a video game, demonstrating the usage of Yampa<br />
* {{HackagePackage|id=cuboid}}; a small puzzle game<br />
* {{HackagePackage|id=Haskelloids}}; asteroids clone<br />
* [http://haskell.cs.yale.edu/nettle/ Nettle] - Programming Network Routers<br />
* [http://haskell.cs.yale.edu/euterpea/ Euterpea] - computer music development (also uses [[CCA]])<br />
* {{HackagePackage|id=YFrob}}; robot simulation<br />
* [https://github.com/ivanperez-keera/haskanoid Haskanoid] A breakout-like videogame with SDL graphics and sound that can optionally be controlled with a Wiimote or a Kinect.<br />
* [https://play.google.com/store/apps/details?id=uk.co.keera.games.magiccookies&hl=en Magic Cookies!] An iOS/Android board game implemented in Haskell using Yampa and SDL2.<br />
<br />
[https://github.com/search?q=yampa&repo=&langOverride=&start_value=1&type=Everything&language=Haskell search Github]<br />
<br />
* [https://github.com/harley/hamball Hamball]<br />
* [https://github.com/werk/YampaShooter YampaShooter]<br />
<br />
== Known forks ==<br />
<br />
* [https://github.com/ony/Yampa-core Yampa-core]<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2012-May/ related discussion]<br />
* [https://github.com/eamsden/Animas Animas]<br />
** code cleanup<br />
* [http://imve.informatik.uni-hamburg.de/projects/FRVR Functional Reactive Virtual Reality]<br />
** [https://svn.code.sf.net/p/frvr/code/AFRP/trunk/ FRVR source code]<br />
** [http://imve.informatik.uni-hamburg.de/projects/DIVE DIVE project]<br />
<br />
[[Category:FRP]]<br />
[[Category:Arrow]]<br />
[[Category:Music]]<br />
[[Category:Robotics]]</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa&diff=64750Yampa2021-09-24T13:25:47Z<p>GeroldMeisinger: /* Introduction */ replace lambdor.net links with archive.org</p>
<hr />
<div>Yampa is a domain-specific embedded language for the programming of hybrid (discrete and continuous time) systems using the concepts of [[Functional Reactive Programming]] (FRP). Yampa is structured using [[Arrow]]s, which greatly reduce the chance of introducing space- and time-leaks into reactive, time-varying systems.<br />
<br />
Yampa was originally developed by the [http://haskell.cs.yale.edu/ Yale Haskell Group] based on the original idea of [http://www.conal.net Conal Elliott's] [http://conal.net/fran/ Fran].<br />
<br />
Hackage: {{HackagePackage|id=Yampa}}<br />
<br />
== Introduction ==<br />
<br />
* [http://www.cs.nott.ac.uk/~psznhn/FoPAD2007/Talks/nhn-FoPAD2007.pdf Henrik Nilsson - A Brief Introduction to Functional Reactive Programming and Yampa]<br />
* [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/ Henrik Nilsson - ITU-FRP2010]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture01.pdf ITU-FRP2010 01]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture02.pdf ITU-FRP2010 02]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture03.pdf ITU-FRP2010 03]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture04.pdf ITU-FRP2010 04]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture05.pdf ITU-FRP2010 05]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture06.pdf ITU-FRP2010 06]<br />
** [http://www.cs.nott.ac.uk/~psznhn/ITU-FRP2010/LectureNotes/lecture07.pdf ITU-FRP2010 07]<br />
* [http://www.cs.yale.edu/homes/hudak/CS429F04/LectureSlides/YampaForCs429.ppt Paul Hudak - Yampa, Arrows, and Robots]<br />
* Yampa tutorials by [http://lambdor.net Gerold Meisinger]<br />
** [https://web.archive.org/web/20100822210238/http://lambdor.net/?p=34 Running primitive signal functions in Yampa]<br />
** [https://web.archive.org/web/20100823084125/http://lambdor.net/?p=59 Yampa/SDL program stub]<br />
** [https://web.archive.org/web/20100823084116/http://lambdor.net/?p=44 Learning Yampa and Functional Reactive Programming]<br />
** [https://web.archive.org/web/20101008051015/http://lambdor.net/?p=209 Diagrams of Yampa switches]<br />
** [https://web.archive.org/web/20100822074057/http://lambdor.net/?p=117 Dataflow diagram of Yampa reactimate]<br />
** [https://web.archive.org/web/20100822074010/http://lambdor.net/?p=113 Activity diagram of Yampa reactimate]<br />
* References: [https://svn.code.sf.net/p/frvr/code/AFRP/trunk/src/foo.ps ps], [http://lambdor.net/wp-content/uploads/2010/12/AFRP-Reference.pdf pdf]<br />
* Videos<br />
** [https://vimeo.com/6632457 Safe Functional Reactive Programming through Dependent Types]<br />
** [https://vimeo.com/6652662 Causal Commutative Arrows and Their Optimization]<br />
** [https://www.youtube.com/watch?v=xtmo6Bmfahc Euterpea: From signals to symphonies]<br />
<br />
== Primitive signal functions ==<br />
<br />
[[Image:Yampa signal functions.png|768px]]<br />
<br />
(download original [[:Image:Yampa signal functions.svg]])<br />
<br />
== Switches ==<br />
<br />
* [[Yampa/switch|switch]]<br />
* [[Yampa/rSwitch|rSwitch]]<br />
* [[Yampa/kSwitch|kSwitch]]<br />
* [[Yampa/pSwitchB|pSwitchB]]<br />
* [[Yampa/pSwitch|pSwitch]]<br />
* [[Yampa/rpSwitchB|rpSwitchB]]<br />
* [[Yampa/rpSwitch|rpSwitch]]<br />
<br />
Each switch comes in two different flavors:<br />
# ''immediate'': switch to the new behaviour immediately and also calculate the return value based on the new behaviour.<br />
# ''delayed'': return the value based on the old behaviour, but use the new behaviour afterwards. To use delayed switch prefix the switching functions with the letter 'd', f.e. 'drpSwitchB'.<br />
<br />
== Reactimation ==<br />
<br />
* [[Yampa/reactimate|reactimate]]<br />
* [[Yampa/game_engine|Game engine]]<br />
<br />
== External Links ==<br />
<br />
* [http://mailman.cs.yale.edu/mailman/listinfo/yampa-users Yampa-Users mailing list] - Yampa-related comments, questions, discussions, and announcements. You can also send bug reports to [mailto:yampa-bugs@cs.yale.edu yampa-bugs@cs.yale.edu].<br />
* [https://wiki.haskell.org/IRC_channel#Projects_using_haskell #yampa] - This is Yampa IRC Channel, please refer to [https://wiki.haskell.org/IRC_channel#Getting_there Getting there] on how to join the channel.<br />
* [https://www.youtube.com/watch?feature=player_detailpage&v=T7XwTolu9YI Yampy Cube] - a live coding presentation with Yampa by Konstantin Zudov at Helsinki FRP Meetup May 6, 2015. [https://github.com/helsinki-frp/yampy-cube (Source code on Github)]<br />
* [http://db.inf.uni-tuebingen.de/team/GeorgeGiorgidze.html George Giorgidze] created YampaSynth, a modular music synthesizer written in Haskell and using Yampa.<br />
* [http://www.thev.net/PaulLiu/#publications Hai (Paul) Liu papers and slides]<br />
* [http://lambdor.net Blog about Yampa] - introduction tutorials and diagrams<br />
* [https://web.archive.org/web/20140820094516/http://blog.edwardamsden.com/2011/03/demonstrating-time-leak-in-arrowized.html Demonstrating a Time Leak in Arrowized FRP] (Web archive)<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2011-April/000409.html answer]<br />
* [https://www.youtube.com/results?search_query=yampa+haskell An overview of Yampa video clips on YouTube]<br />
<br />
== Known users ==<br />
<br />
[https://www.google.com/search?hl=en&q=yampa%20site%3Ahackage.haskell.org%2Fpackage&aqi=g10 search Hackage]<br />
<br />
* {{HackagePackage|id=YampaSynth}} - is a software synthesizer implemented in Haskell using Yampa. It contains a framework of sound generating and sound shaping modules (e.g. oscillator, amplifier, mixer, envelope generator, filter, etc.) and example applications.<br />
* [http://www.haskell.org/haskellwiki/Frag Frag]; a simple Quake 3 clone, using a very early version of Yampa called arrowized functional reactive programming (AFRP)<br />
* {{HackagePackage|id=SpaceInvaders}}; a video game, demonstrating the usage of Yampa<br />
* {{HackagePackage|id=cuboid}}; a small puzzle game<br />
* {{HackagePackage|id=Haskelloids}}; asteroids clone<br />
* [http://haskell.cs.yale.edu/nettle/ Nettle] - Programming Network Routers<br />
* [http://haskell.cs.yale.edu/euterpea/ Euterpea] - computer music development (also uses [[CCA]])<br />
* {{HackagePackage|id=YFrob}}; robot simulation<br />
* [https://github.com/ivanperez-keera/haskanoid Haskanoid] A breakout-like videogame with SDL graphics and sound that can optionally be controlled with a Wiimote or a Kinect.<br />
* [https://play.google.com/store/apps/details?id=uk.co.keera.games.magiccookies&hl=en Magic Cookies!] An iOS/Android board game implemented in Haskell using Yampa and SDL2.<br />
<br />
[https://github.com/search?q=yampa&repo=&langOverride=&start_value=1&type=Everything&language=Haskell search Github]<br />
<br />
* [https://github.com/harley/hamball Hamball]<br />
* [https://github.com/werk/YampaShooter YampaShooter]<br />
<br />
== Known forks ==<br />
<br />
* [https://github.com/ony/Yampa-core Yampa-core]<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2012-May/ related discussion]<br />
* [https://github.com/eamsden/Animas Animas]<br />
** code cleanup<br />
* [http://imve.informatik.uni-hamburg.de/projects/FRVR Functional Reactive Virtual Reality]<br />
** [https://svn.code.sf.net/p/frvr/code/AFRP/trunk/ FRVR source code]<br />
** [http://imve.informatik.uni-hamburg.de/projects/DIVE DIVE project]<br />
<br />
[[Category:FRP]]<br />
[[Category:Arrow]]<br />
[[Category:Music]]<br />
[[Category:Robotics]]</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa/kSwitch&diff=54220Yampa/kSwitch2012-10-07T20:50:21Z<p>GeroldMeisinger: </p>
<hr />
<div>[[Image:Yampa kSwitch.png|768px]]<br />
<br />
<source lang="haskell"><br />
kSwitch :: SF in out<br />
-> SF (in, out) (Event t)<br />
-> (SF in out -> t -> SF in out)<br />
-> SF in out<br />
</source><br />
<br />
(download original [[:Image:Yampa kSwitch.svg|Yampa kSwitch.svg]])<br />
<br />
{{Yampa Switches}}</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa/kSwitch&diff=54219Yampa/kSwitch2012-10-07T20:50:10Z<p>GeroldMeisinger: </p>
<hr />
<div>[[Image:Yampa kSwitch.png|768px]]<br />
<br />
<source lang="haskell"><br />
kSwitch :: SF in out<br />
-> SF (in, out) (Event t)<br />
-> (SF in out -> t -> SF in out)<br />
-> SF in out<br />
</source><br />
<br />
(download original [[:Image:Yampa kSwitch.svg|Yampa kSwitch.svg]])<br />
<br />
{{Yampa Switches}}</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa&diff=54218Yampa2012-10-07T20:49:26Z<p>GeroldMeisinger: /* Switches */</p>
<hr />
<div>Yampa is a domain-specific embedded language for the programming of hybrid (discrete and continuous time) systems using the concepts of [[Functional Reactive Programming]] (FRP). Yampa is structured using [[Arrow]]s, which greatly reduce the chance of introducing space- and time-leaks into reactive, time-varying systems.<br />
<br />
Yampa was originally developed by the [http://haskell.cs.yale.edu/ Yale Haskell Group] based on the original idea of [http://www.conal.net Conal Elliott's] [[Fran]].<br />
<br />
Hackage: {{HackagePackage|id=Yampa}}<br />
<br />
== Introduction ==<br />
<br />
* [http://www.cs.nott.ac.uk/~nhn/FoPAD2007/Talks/nhn-FoPAD2007.pdf Henrik Nilsson - A Brief Introduction to Functional Reactive Programming and Yampa]<br />
* [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/ Henrik Nilsson - ITU-FRP2010]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture01.pdf ITU-FRP2010 01]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture02.pdf ITU-FRP2010 02]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture03.pdf ITU-FRP2010 03]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture04.pdf ITU-FRP2010 04]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture05.pdf ITU-FRP2010 05]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture06.pdf ITU-FRP2010 06]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture07.pdf ITU-FRP2010 07]<br />
* [http://plucky.cs.yale.edu/CS429F04/LectureSlides/YampaForCs429.ppt Paul Hudak - Yampa, Arrows, and Robots]<br />
* Yampa tutorials by [http://lambdor.net Gerold Meisinger]<br />
** [http://lambdor.net/?p=34 Running primitive signal functions in Yampa]<br />
** [http://lambdor.net/?p=59 Yampa/SDL program stub]<br />
** [http://lambdor.net/?p=44 Learning Yampa and Functional Reactive Programming]<br />
** [http://lambdor.net/?p=209 Diagrams of Yampa switches]<br />
** [http://lambdor.net/?p=117 Dataflow diagram of Yampa reactimate]<br />
** [http://lambdor.net/?p=113 Activity diagram of Yampa reactimate]<br />
* [https://github.com/shaleny/lazyfoo shaleny LazyFoo SDL examples] translated to Haskell/Yampa (lecture 16-)<br />
* References: [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk/src/foo.ps ps], [http://lambdor.net/wp-content/uploads/2010/12/AFRP-Reference.pdf pdf]<br />
* Videos<br />
** [http://vimeo.com/6632457 Safe Functional Reactive Programming through Dependent Types]<br />
** [http://vimeo.com/6652662 Causal Commutative Arrows and Their Optimization]<br />
** [http://www.youtube.com/watch?v=xtmo6Bmfahc Euterpea: From signals to symphonies]<br />
<br />
== Primitive signal functions ==<br />
<br />
[[Image:Yampa signal functions.png|768px]]<br />
<br />
(download original [[:Image:Yampa signal functions.svg]])<br />
<br />
== Switches ==<br />
<br />
* [[Yampa/switch|switch]]<br />
* [[Yampa/rSwitch|rSwitch]]<br />
* [[Yampa/kSwitch|kSwitch]]<br />
* [[Yampa/pSwitchB|pSwitchB]]<br />
* [[Yampa/pSwitch|pSwitch]]<br />
* [[Yampa/rpSwitchB|rpSwitchB]]<br />
* [[Yampa/rpSwitch|rpSwitch]]<br />
<br />
Each switch comes in two different flavors:<br />
# ''immediate'': switch to the new behaviour immediately and also calculate the return value based on the new behaviour.<br />
# ''delayed'': return the value based on the old behaviour, but use the new behaviour afterwards. To use delayed switch prefix the switching functions with the letter 'd', f.e. 'drpSwitchB'.<br />
<br />
== Reactimation ==<br />
<br />
* [[Yampa/reactimate|reactimate]]<br />
* [[Yampa/game_engine|Game engine]]<br />
<br />
== External Links ==<br />
<br />
* [http://mailman.cs.yale.edu/mailman/listinfo/yampa-users Yampa-Users mailing list] - Yampa-related comments, questions, discussions, and announcements. You can also send bug reports to [mailto:yampa-bugs@cs.yale.edu yampa-bugs@cs.yale.edu].<br />
* [http://www.cs.nott.ac.uk/~ggg/ George Giorgidze] created YampaSynth, a modular music synthesizer written in Haskell and using Yampa.<br />
* [http://www.cs.yale.edu/homes/hl293] - Hai (Paul) Liu papers and slides<br />
* [http://lambdor.net Blog about Yampa] - introduction tutorials and diagrams<br />
* [http://blog.edwardamsden.com/2011/03/demonstrating-time-leak-in-arrowized.html Demonstrating a Time Leak in Arrowized FRP]<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2011-April/000409.html answer]<br />
<br />
== Known users ==<br />
<br />
[https://www.google.com/search?hl=en&q=yampa%20site%3Ahackage.haskell.org%2Fpackage&aqi=g10 search Hackage]<br />
<br />
* {{HackagePackage|id=YampaSynth}} - is a software synthesizer implemented in Haskell using Yampa. It contains a framework of sound generating and sound shaping modules (e.g. oscillator, amplifier, mixer, envelope generator, filter, etc.) and example applications.<br />
* [http://www.haskell.org/haskellwiki/Frag Frag]; a simple Quake 3 clone, using a very early version of Yampa called arrowized functional reactive programming (AFRP)<br />
* {{HackagePackage|id=SpaceInvaders}}; a video game, demonstrating the usage of Yampa<br />
* {{HackagePackage|id=Cuboid}}; a small puzzle game<br />
* {{HackagePackage|id=Haskelloids}}; asteroids clone<br />
* [http://haskell.cs.yale.edu/?page_id=376 Nettle] - Programming Network Routers<br />
* [http://haskell.cs.yale.edu/?page_id=103 Euterpea] - computer music development (also uses [[CCA]])<br />
* {{HackagePackage|id=YFrob}}; robot simulation<br />
<br />
[https://github.com/search?q=yampa&repo=&langOverride=&start_value=1&type=Everything&language=Haskell search Github]<br />
<br />
* [https://github.com/harleyttd/hamball Hamball]<br />
* [https://github.com/werk/YampaShooter YampaShooter]<br />
<br />
== Known forks ==<br />
<br />
* [https://github.com/ony/Yampa-core Yampa-core]<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2012-May/ related discussion]<br />
* [https://github.com/eamsden/Animas Animas]<br />
** code cleanup<br />
** [http://blog.edwardamsden.com/ Facts and Theories] blog by Edward Amsden<br />
* [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk FRVR]<br />
** restructuring of modules<br />
** [http://imve.informatik.uni-hamburg.de/projects/DIVE DIVE project]<br />
** [http://imve.informatik.uni-hamburg.de/files/71-Blom-Diss-online.pdf Kristopher J. Blom - Dynamic, Interactive Virtual Environments] section 8.3<br />
<br />
[[Category:FRP]]<br />
[[Category:Arrow]]<br />
[[Category:Music]]<br />
[[Category:Robotics]]</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=GLFW&diff=46028GLFW2012-06-12T09:16:26Z<p>GeroldMeisinger: glfw and glfw-b</p>
<hr />
<div>[[Category:Libraries]]<br />
[[Category:Graphics]]<br />
<br />
Note: There are two GLFW hackage packages {{HackagePackage|id=GLFW}} and {{HackagePackage|id=GLFW-b}}. This article is about GLFW (except for bottom paragraph).<br />
<br />
== About ==<br />
<br />
This is a Haskell module for [http://www.glfw.org/ GLFW OpenGL framework]. It provides an alternative to GLUT for OpenGL based Haskell programs.<br />
<br />
== Status ==<br />
<br />
The library is being used by the [http://www.cs.yale.edu/homes/hudak/SOE/ Haskell School of Expression (SOE)] code to render Graphics in a cross-platform manner. It currently interfaces with GLFW version 2.7.2, works on Windows, Linux (i386) and Mac OS X.<br />
<br />
GLFW itself is well documented (see [http://www.glfw.org/ GLFW website]), and the Haskell module API is documented via Haddock.<br />
<br />
Not all functions are fully tested, and there are still a<br />
few GLFW C functions missing from the Haskell module, namely<br />
the image loading functions. They are excluded because image<br />
handling is a separate issue, and low level buffer manipulation<br />
would obscure their use further. Texture loading from TGA<br />
format is supported both from file and from memory (via a<br />
string buffer)..<br />
<br />
The Haskell module also provides basic text rendering while<br />
GLFW doesn't. It comes from a free 8x16 font which is made<br />
into a TGA texture, stored as a Haskell string in the file<br />
GLFW.hs. Text rendering<br />
is only possible with Alpha enabled. Again, see SOE.hs from<br />
the SOE package for sample usage.<br />
<br />
GLFW may not work well with GHC threads, forkIO or threadDelay.<br />
So avoid them if you can.<br />
<br />
== Download ==<br />
<br />
Current version is [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/GLFW GLFW-0.5.0.0]. It works with Cabal 1.10 or later. It compiles GLFW C source code as part of the building process, please report to the package maintainer if you have build problems.<br />
<br />
== More information ==<br />
* [http://hackage.haskell.org/packages/archive/GLFW/0.5.0.0/doc/html/Graphics-UI-GLFW.html The Haddock documentation]<br />
* [http://www.glfw.org/ The GLFW site]<br />
<br />
<br />
== Sample Program ==<br />
<br />
To demonstrate the usage of GLFW for OpenGL based Haskell applications, here is a sample program that allows user to draw lines by holding the left mouse button and move the mouse.<br />
<br />
<haskell><br />
import Graphics.Rendering.OpenGL as GL<br />
import Graphics.UI.GLFW as GLFW<br />
import Graphics.Rendering.OpenGL (($=))<br />
import Data.IORef<br />
import Control.Monad<br />
import System.Environment (getArgs, getProgName)<br />
</haskell><br />
<br />
Because the program needs to process user input, i.e., mouse button and movements, we'll use a continuation like structure for this purpose. The <hask>Action</hask> type represents an IO operation that returns the next <hask>Action</hask> to continue execution.<br />
<br />
<haskell><br />
data Action = Action (IO Action)<br />
</haskell><br />
<br />
The main program is mostly book-keeping such as initializing OpenGL and GLFW, creating window, setting up viewport, etc.<br />
<br />
<haskell><br />
main = do<br />
-- invoke either active or passive drawing loop depending on command line argument<br />
args <- getArgs<br />
prog <- getProgName<br />
case args of<br />
["active"] -> putStrLn "Running in active mode" >> main' active<br />
["passive"] -> putStrLn "Running in passive mode" >> main' passive<br />
_ -> putStrLn $ "USAGE: " ++ prog ++ " [active|passive]"<br />
<br />
main' run = do<br />
GLFW.initialize<br />
-- open window<br />
GLFW.openWindow (GL.Size 400 400) [GLFW.DisplayAlphaBits 8] GLFW.Window<br />
GLFW.windowTitle $= "GLFW Demo"<br />
GL.shadeModel $= GL.Smooth<br />
-- enable antialiasing<br />
GL.lineSmooth $= GL.Enabled<br />
GL.blend $= GL.Enabled<br />
GL.blendFunc $= (GL.SrcAlpha, GL.OneMinusSrcAlpha)<br />
GL.lineWidth $= 1.5<br />
-- set the color to clear background<br />
GL.clearColor $= Color4 0 0 0 0<br />
<br />
-- set 2D orthogonal view inside windowSizeCallback because<br />
-- any change to the Window size should result in different<br />
-- OpenGL Viewport.<br />
GLFW.windowSizeCallback $= \ size@(GL.Size w h) -><br />
do<br />
GL.viewport $= (GL.Position 0 0, size)<br />
GL.matrixMode $= GL.Projection<br />
GL.loadIdentity<br />
GL.ortho2D 0 (realToFrac w) (realToFrac h) 0<br />
-- keep all line strokes as a list of points in an IORef<br />
lines <- newIORef []<br />
-- run the main loop<br />
run lines<br />
-- finish up<br />
GLFW.closeWindow<br />
GLFW.terminate<br />
</haskell><br />
<br />
There are usually two ways to structure the main loop of GLFW programs. One is by actively polling events before processing them. The screen buffer is usually redrawn every time before <hask>swapBuffers</hask> is called. This is the simplest main loop often seen in game applications, and may waste CPU cycles even when there is no visual update. Note that <hask>swapBuffers</hask> by default calls <hask>pollEvents</hask> implicitly, so there is no need to do a separate poll.<br />
<br />
<haskell><br />
-- we start with waitForPress action<br />
active lines = loop waitForPress<br />
where <br />
<br />
loop action = do<br />
-- draw the entire screen<br />
render lines<br />
-- swap buffer<br />
GLFW.swapBuffers<br />
-- check whether ESC is pressed for termination<br />
p <- GLFW.getKey GLFW.ESC<br />
unless (p == GLFW.Press) $<br />
do<br />
-- perform action<br />
Action action' <- action<br />
-- sleep for 1ms to yield CPU to other applications<br />
GLFW.sleep 0.001<br />
<br />
-- only continue when the window is not closed<br />
windowOpen <- getParam Opened<br />
unless (not windowOpen) $<br />
loop action' -- loop with next action<br />
<br />
waitForPress = do<br />
b <- GLFW.getMouseButton GLFW.ButtonLeft<br />
case b of<br />
GLFW.Release -> return (Action waitForPress)<br />
GLFW.Press -> do<br />
-- when left mouse button is pressed, add the point<br />
-- to lines and switch to waitForRelease action.<br />
(GL.Position x y) <- GL.get GLFW.mousePos <br />
modifyIORef lines (((x,y):) . ((x,y):))<br />
return (Action waitForRelease)<br />
<br />
waitForRelease = do<br />
-- keep track of mouse movement while waiting for button <br />
-- release<br />
(GL.Position x y) <- GL.get GLFW.mousePos<br />
-- update the line with new ending position<br />
modifyIORef lines (((x,y):) . tail)<br />
b <- GLFW.getMouseButton GLFW.ButtonLeft<br />
case b of<br />
-- when button is released, switch back back to <br />
-- waitForPress action<br />
GLFW.Release -> return (Action waitForPress)<br />
GLFW.Press -> return (Action waitForRelease)<br />
</haskell><br />
<br />
Another way to structure the main loop is to register event callbacks and use <hask>waitEvents</hask>. This way we don't have to put the program to sleep every 1ms because it'll not be using any CPU cycle when there is no event to handle.<br />
<br />
One reminder in this approach is that <hask>swapBuffers</hask> must be handled with care, because it by default invokes <hask>pollEvents</hask>, which in turn invokes all callback functions. So if <hask>swapBuffers</hask> is used inside a callback, it'll create infinite loop and hang the program. To avoid it, we should disable the <hask>AutoPollEvent</hask> behavior using <hask>disableSpecial</hask>.<br />
<br />
Another optimization we can do is to use a dirty marker to remember whether the screen really needs to be redrawn. This'll not only save CPU cycles but also speed up event processing to avoid piling up events in the event queue. Similar tricks can be done to optimize the active polling approach.<br />
<br />
<haskell><br />
passive lines = do<br />
-- disable auto polling in swapBuffers<br />
GLFW.disableSpecial GLFW.AutoPollEvent<br />
<br />
-- keep track of whether ESC has been pressed<br />
quit <- newIORef False<br />
<br />
-- keep track of whether screen needs to be redrawn<br />
dirty <- newIORef True<br />
<br />
-- mark screen dirty in refresh callback which is often called<br />
-- when screen or part of screen comes into visibility.<br />
GLFW.windowRefreshCallback $= writeIORef dirty True<br />
<br />
-- use key callback to track whether ESC is pressed<br />
GLFW.keyCallback $= \k s -> <br />
when (fromEnum k == fromEnum GLFW.ESC && s == GLFW.Press) $ <br />
writeIORef quit True<br />
<br />
-- Terminate the program if the window is closed<br />
GLFW.windowCloseCallback $= (writeIORef quit True >> return True)<br />
<br />
-- by default start with waitForPress<br />
waitForPress dirty<br />
loop dirty quit<br />
where<br />
<br />
loop dirty quit = do<br />
GLFW.waitEvents<br />
-- redraw screen if dirty<br />
d <- readIORef dirty<br />
<br />
when d $ <br />
render lines >> GLFW.swapBuffers<br />
<br />
writeIORef dirty False<br />
-- check if we need to quit the loop<br />
q <- readIORef quit<br />
unless q $<br />
loop dirty quit<br />
<br />
waitForPress dirty =<br />
do<br />
GLFW.mousePosCallback $= \_ -> return ()<br />
<br />
GLFW.mouseButtonCallback $= \b s -> <br />
when (b == GLFW.ButtonLeft && s == GLFW.Press) $<br />
do<br />
-- when left mouse button is pressed, add the point<br />
-- to lines and switch to waitForRelease action.<br />
(GL.Position x y) <- GL.get GLFW.mousePos<br />
modifyIORef lines (((x,y):) . ((x,y):))<br />
waitForRelease dirty<br />
<br />
waitForRelease dirty = <br />
do <br />
GLFW.mousePosCallback $= \(Position x y) -><br />
do<br />
-- update the line with new ending position<br />
modifyIORef lines (((x,y):) . tail)<br />
-- mark screen dirty<br />
writeIORef dirty True<br />
<br />
GLFW.mouseButtonCallback $= \b s -><br />
-- when left mouse button is released, switch back to<br />
-- waitForPress action.<br />
when (b == GLFW.ButtonLeft && s == GLFW.Release) $<br />
waitForPress dirty<br />
</haskell><br />
<br />
Just replace <hask>active</hask> with <hask>passive</hask> in the <hask>main</hask> function to run the second approach.<br />
<br />
The rest of the program goes below.<br />
<br />
<haskell><br />
render lines = do<br />
l <- readIORef lines<br />
GL.clear [GL.ColorBuffer]<br />
GL.color $ color3 1 0 0<br />
GL.renderPrimitive GL.Lines $ mapM_<br />
(\ (x, y) -> GL.vertex (vertex3 (fromIntegral x) (fromIntegral y) 0)) l<br />
<br />
<br />
vertex3 :: GLfloat -> GLfloat -> GLfloat -> GL.Vertex3 GLfloat<br />
vertex3 = GL.Vertex3<br />
<br />
<br />
color3 :: GLfloat -> GLfloat -> GLfloat -> GL.Color3 GLfloat<br />
color3 = GL.Color3<br />
</haskell><br />
<br />
<br />
== More examples and external links ==<br />
<br />
A number of famous [http://nehe.gamedev.net/ NeHe OpenGL tutorials] have been translated into Haskell using [http://hackage.haskell.org/package/GLFW-b GLFW-b] (instead of GLFW) and made available in the [http://hackage.haskell.org/package/nehe-tuts nehe-tuts package] by Jason Dagit. Code as well as executables are available via the package page.</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa&diff=46026Yampa2012-06-12T08:50:22Z<p>GeroldMeisinger: hackage</p>
<hr />
<div>Yampa is a domain-specific embedded language for the programming of hybrid (discrete and continuous time) systems using the concepts of [[Functional Reactive Programming]] (FRP). Yampa is structured using [[Arrow]]s, which greatly reduce the chance of introducing space- and time-leaks into reactive, time-varying systems.<br />
<br />
Yampa was originally developed by the [http://haskell.cs.yale.edu/ Yale Haskell Group] based on the original idea of [http://www.conal.net Conal Elliott's] [[Fran]].<br />
<br />
Hackage: {{HackagePackage|id=Yampa}}<br />
<br />
== Introduction ==<br />
<br />
* [http://www.cs.nott.ac.uk/~nhn/FoPAD2007/Talks/nhn-FoPAD2007.pdf Henrik Nilsson - A Brief Introduction to Functional Reactive Programming and Yampa]<br />
* [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/ Henrik Nilsson - ITU-FRP2010]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture01.pdf ITU-FRP2010 01]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture02.pdf ITU-FRP2010 02]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture03.pdf ITU-FRP2010 03]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture04.pdf ITU-FRP2010 04]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture05.pdf ITU-FRP2010 05]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture06.pdf ITU-FRP2010 06]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture07.pdf ITU-FRP2010 07]<br />
* [http://plucky.cs.yale.edu/CS429F04/LectureSlides/YampaForCs429.ppt Paul Hudak - Yampa, Arrows, and Robots]<br />
* Yampa tutorials by [http://lambdor.net Gerold Meisinger]<br />
** [http://lambdor.net/?p=34 Running primitive signal functions in Yampa]<br />
** [http://lambdor.net/?p=59 Yampa/SDL program stub]<br />
** [http://lambdor.net/?p=44 Learning Yampa and Functional Reactive Programming]<br />
** [http://lambdor.net/?p=209 Diagrams of Yampa switches]<br />
** [http://lambdor.net/?p=117 Dataflow diagram of Yampa reactimate]<br />
** [http://lambdor.net/?p=113 Activity diagram of Yampa reactimate]<br />
* [https://github.com/shaleny/lazyfoo shaleny LazyFoo SDL examples] translated to Haskell/Yampa (lecture 16-)<br />
* References: [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk/src/foo.ps ps], [http://lambdor.net/wp-content/uploads/2010/12/AFRP-Reference.pdf pdf]<br />
* Videos<br />
** [http://vimeo.com/6632457 Safe Functional Reactive Programming through Dependent Types]<br />
** [http://vimeo.com/6652662 Causal Commutative Arrows and Their Optimization]<br />
** [http://www.youtube.com/watch?v=xtmo6Bmfahc Euterpea: From signals to symphonies]<br />
<br />
== Primitive signal functions ==<br />
<br />
[[Image:Yampa signal functions.png|768px]]<br />
<br />
(download original [[:Image:Yampa signal functions.svg]])<br />
<br />
== Switches ==<br />
<br />
* [[Yampa/switch|switch]]<br />
* [[Yampa/rSwitch|rSwitch]]<br />
* [[Yampa/rSwitch|kSwitch]]<br />
* [[Yampa/pSwitchB|pSwitchB]]<br />
* [[Yampa/pSwitch|pSwitch]]<br />
* [[Yampa/rpSwitchB|rpSwitchB]]<br />
* [[Yampa/rpSwitch|rpSwitch]]<br />
<br />
Each switch comes in two different flavors:<br />
# ''immediate'': switch to the new behaviour immediately and also calculate the return value based on the new behaviour.<br />
# ''delayed'': return the value based on the old behaviour, but use the new behaviour afterwards. To use delayed switch prefix the switching functions with the letter 'd', f.e. 'drpSwitchB'.<br />
<br />
== Reactimation ==<br />
<br />
* [[Yampa/reactimate|reactimate]]<br />
* [[Yampa/game_engine|Game engine]]<br />
<br />
== External Links ==<br />
<br />
* [http://mailman.cs.yale.edu/mailman/listinfo/yampa-users Yampa-Users mailing list] - Yampa-related comments, questions, discussions, and announcements. You can also send bug reports to [mailto:yampa-bugs@cs.yale.edu yampa-bugs@cs.yale.edu].<br />
* [http://www.cs.nott.ac.uk/~ggg/ George Giorgidze] created YampaSynth, a modular music synthesizer written in Haskell and using Yampa.<br />
* [http://www.cs.yale.edu/homes/hl293] - Hai (Paul) Liu papers and slides<br />
* [http://lambdor.net Blog about Yampa] - introduction tutorials and diagrams<br />
* [http://blog.edwardamsden.com/2011/03/demonstrating-time-leak-in-arrowized.html Demonstrating a Time Leak in Arrowized FRP]<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2011-April/000409.html answer]<br />
<br />
== Known users ==<br />
<br />
[https://www.google.com/search?hl=en&q=yampa%20site%3Ahackage.haskell.org%2Fpackage&aqi=g10 search Hackage]<br />
<br />
* {{HackagePackage|id=YampaSynth}} - is a software synthesizer implemented in Haskell using Yampa. It contains a framework of sound generating and sound shaping modules (e.g. oscillator, amplifier, mixer, envelope generator, filter, etc.) and example applications.<br />
* [http://www.haskell.org/haskellwiki/Frag Frag]; a simple Quake 3 clone, using a very early version of Yampa called arrowized functional reactive programming (AFRP)<br />
* {{HackagePackage|id=SpaceInvaders}}; a video game, demonstrating the usage of Yampa<br />
* {{HackagePackage|id=Cuboid}}; a small puzzle game<br />
* {{HackagePackage|id=Haskelloids}}; asteroids clone<br />
* [http://haskell.cs.yale.edu/?page_id=376 Nettle] - Programming Network Routers<br />
* [http://haskell.cs.yale.edu/?page_id=103 Euterpea] - computer music development (also uses [[CCA]])<br />
* {{HackagePackage|id=YFrob}}; robot simulation<br />
<br />
[https://github.com/search?q=yampa&repo=&langOverride=&start_value=1&type=Everything&language=Haskell search Github]<br />
<br />
* [https://github.com/harleyttd/hamball Hamball]<br />
* [https://github.com/werk/YampaShooter YampaShooter]<br />
<br />
== Known forks ==<br />
<br />
* [https://github.com/ony/Yampa-core Yampa-core]<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2012-May/ related discussion]<br />
* [https://github.com/eamsden/Animas Animas]<br />
** code cleanup<br />
** [http://blog.edwardamsden.com/ Facts and Theories] blog by Edward Amsden<br />
* [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk FRVR]<br />
** restructuring of modules<br />
** [http://imve.informatik.uni-hamburg.de/projects/DIVE DIVE project]<br />
** [http://imve.informatik.uni-hamburg.de/files/71-Blom-Diss-online.pdf Kristopher J. Blom - Dynamic, Interactive Virtual Environments] section 8.3<br />
<br />
[[Category:FRP]]<br />
[[Category:Arrow]]<br />
[[Category:Music]]<br />
[[Category:Robotics]]</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa&diff=45911Yampa2012-06-06T00:13:45Z<p>GeroldMeisinger: /* Known users */</p>
<hr />
<div>Yampa is a domain-specific embedded language for the programming of hybrid (discrete and continuous time) systems using the concepts of [[Functional Reactive Programming]] (FRP). Yampa is structured using [[Arrow]]s, which greatly reduce the chance of introducing space- and time-leaks into reactive, time-varying systems.<br />
<br />
Yampa was originally developed by the [http://haskell.cs.yale.edu/ Yale Haskell Group] based on the original idea of [http://www.conal.net Conal Elliott's] [[Fran]].<br />
<br />
== Introduction ==<br />
<br />
* [http://www.cs.nott.ac.uk/~nhn/FoPAD2007/Talks/nhn-FoPAD2007.pdf Henrik Nilsson - A Brief Introduction to Functional Reactive Programming and Yampa]<br />
* [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/ Henrik Nilsson - ITU-FRP2010]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture01.pdf ITU-FRP2010 01]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture02.pdf ITU-FRP2010 02]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture03.pdf ITU-FRP2010 03]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture04.pdf ITU-FRP2010 04]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture05.pdf ITU-FRP2010 05]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture06.pdf ITU-FRP2010 06]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture07.pdf ITU-FRP2010 07]<br />
* [http://plucky.cs.yale.edu/CS429F04/LectureSlides/YampaForCs429.ppt Paul Hudak - Yampa, Arrows, and Robots]<br />
* Yampa tutorials by [http://lambdor.net Gerold Meisinger]<br />
** [http://lambdor.net/?p=34 Running primitive signal functions in Yampa]<br />
** [http://lambdor.net/?p=59 Yampa/SDL program stub]<br />
** [http://lambdor.net/?p=44 Learning Yampa and Functional Reactive Programming]<br />
** [http://lambdor.net/?p=209 Diagrams of Yampa switches]<br />
** [http://lambdor.net/?p=117 Dataflow diagram of Yampa reactimate]<br />
** [http://lambdor.net/?p=113 Activity diagram of Yampa reactimate]<br />
* [https://github.com/shaleny/lazyfoo shaleny LazyFoo SDL examples] translated to Haskell/Yampa (lecture 16-)<br />
* References: [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk/src/foo.ps ps], [http://lambdor.net/wp-content/uploads/2010/12/AFRP-Reference.pdf pdf]<br />
* Videos<br />
** [http://vimeo.com/6632457 Safe Functional Reactive Programming through Dependent Types]<br />
** [http://vimeo.com/6652662 Causal Commutative Arrows and Their Optimization]<br />
** [http://www.youtube.com/watch?v=xtmo6Bmfahc Euterpea: From signals to symphonies]<br />
<br />
== Primitive signal functions ==<br />
<br />
[[Image:Yampa signal functions.png|768px]]<br />
<br />
(download original [[:Image:Yampa signal functions.svg]])<br />
<br />
== Switches ==<br />
<br />
* [[Yampa/switch|switch]]<br />
* [[Yampa/rSwitch|rSwitch]]<br />
* [[Yampa/rSwitch|kSwitch]]<br />
* [[Yampa/pSwitchB|pSwitchB]]<br />
* [[Yampa/pSwitch|pSwitch]]<br />
* [[Yampa/rpSwitchB|rpSwitchB]]<br />
* [[Yampa/rpSwitch|rpSwitch]]<br />
<br />
Each switch comes in two different flavors:<br />
# ''immediate'': switch to the new behaviour immediately and also calculate the return value based on the new behaviour.<br />
# ''delayed'': return the value based on the old behaviour, but use the new behaviour afterwards. To use delayed switch prefix the switching functions with the letter 'd', f.e. 'drpSwitchB'.<br />
<br />
== Reactimation ==<br />
<br />
* [[Yampa/reactimate|reactimate]]<br />
* [[Yampa/game_engine|Game engine]]<br />
<br />
== External Links ==<br />
<br />
* [http://mailman.cs.yale.edu/mailman/listinfo/yampa-users Yampa-Users mailing list] - Yampa-related comments, questions, discussions, and announcements. You can also send bug reports to [mailto:yampa-bugs@cs.yale.edu yampa-bugs@cs.yale.edu].<br />
* [http://www.cs.nott.ac.uk/~ggg/ George Giorgidze] created YampaSynth, a modular music synthesizer written in Haskell and using Yampa.<br />
* [http://www.cs.yale.edu/homes/hl293] - Hai (Paul) Liu papers and slides<br />
* [http://lambdor.net Blog about Yampa] - introduction tutorials and diagrams<br />
* [http://blog.edwardamsden.com/2011/03/demonstrating-time-leak-in-arrowized.html Demonstrating a Time Leak in Arrowized FRP]<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2011-April/000409.html answer]<br />
<br />
== Known users ==<br />
<br />
[https://www.google.com/search?hl=en&q=yampa%20site%3Ahackage.haskell.org%2Fpackage&aqi=g10 search Hackage]<br />
<br />
* {{HackagePackage|id=YampaSynth}} - is a software synthesizer implemented in Haskell using Yampa. It contains a framework of sound generating and sound shaping modules (e.g. oscillator, amplifier, mixer, envelope generator, filter, etc.) and example applications.<br />
* [http://www.haskell.org/haskellwiki/Frag Frag]; a simple Quake 3 clone, using a very early version of Yampa called arrowized functional reactive programming (AFRP)<br />
* {{HackagePackage|id=SpaceInvaders}}; a video game, demonstrating the usage of Yampa<br />
* {{HackagePackage|id=Cuboid}}; a small puzzle game<br />
* {{HackagePackage|id=Haskelloids}}; asteroids clone<br />
* [http://haskell.cs.yale.edu/?page_id=376 Nettle] - Programming Network Routers<br />
* [http://haskell.cs.yale.edu/?page_id=103 Euterpea] - computer music development (also uses [[CCA]])<br />
* {{HackagePackage|id=YFrob}}; robot simulation<br />
<br />
[https://github.com/search?q=yampa&repo=&langOverride=&start_value=1&type=Everything&language=Haskell search Github]<br />
<br />
* [https://github.com/harleyttd/hamball Hamball]<br />
* [https://github.com/werk/YampaShooter YampaShooter]<br />
<br />
== Known forks ==<br />
<br />
* [https://github.com/ony/Yampa-core Yampa-core]<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2012-May/ related discussion]<br />
* [https://github.com/eamsden/Animas Animas]<br />
** code cleanup<br />
** [http://blog.edwardamsden.com/ Facts and Theories] blog by Edward Amsden<br />
* [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk FRVR]<br />
** restructuring of modules<br />
** [http://imve.informatik.uni-hamburg.de/projects/DIVE DIVE project]<br />
** [http://imve.informatik.uni-hamburg.de/files/71-Blom-Diss-online.pdf Kristopher J. Blom - Dynamic, Interactive Virtual Environments] section 8.3<br />
<br />
[[Category:FRP]]<br />
[[Category:Arrow]]<br />
[[Category:Music]]</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa&diff=40792Yampa2011-07-02T19:42:15Z<p>GeroldMeisinger: /* Introduction */</p>
<hr />
<div>Yampa is a domain-specific embedded language for the programming of hybrid (discrete and continuous time) systems using the concepts of [[Functional Reactive Programming]] (FRP). Yampa is structured using [[Arrow]]s, which greatly reduce the chance of introducing space- and time-leaks into reactive, time-varying systems.<br />
<br />
Yampa was originally developed by the [http://haskell.cs.yale.edu/ Yale Haskell Group] based on the original idea of [http://www.conal.net Conal Elliott's] [[Fran]].<br />
<br />
'''[https://github.com/eamsden/Animas Download Animas]''' (most up to date Yampa fork, or [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Yampa download original Yampa])<br />
<br />
== Introduction ==<br />
<br />
* [http://www.cs.nott.ac.uk/~nhn/FoPAD2007/Talks/nhn-FoPAD2007.pdf Henrik Nilsson - A Brief Introduction to Functional Reactive Programming and Yampa]<br />
* [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/ Henrik Nilsson - ITU-FRP2010]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture01.pdf ITU-FRP2010 01]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture02.pdf ITU-FRP2010 02]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture03.pdf ITU-FRP2010 03]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture04.pdf ITU-FRP2010 04]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture05.pdf ITU-FRP2010 05]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture06.pdf ITU-FRP2010 06]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture07.pdf ITU-FRP2010 07]<br />
* [http://plucky.cs.yale.edu/CS429F04/LectureSlides/YampaForCs429.ppt Paul Hudak - Yampa, Arrows, and Robots]<br />
* Yampa tutorials by [http://lambdor.net Gerold Meisinger]<br />
** [http://lambdor.net/?p=34 Running primitive signal functions in Yampa]<br />
** [http://lambdor.net/?p=59 Yampa/SDL program stub]<br />
** [http://lambdor.net/?p=44 Learning Yampa and Functional Reactive Programming]<br />
** [http://lambdor.net/?p=209 Diagrams of Yampa switches]<br />
** [http://lambdor.net/?p=117 Dataflow diagram of Yampa reactimate]<br />
** [http://lambdor.net/?p=113 Activity diagram of Yampa reactimate]<br />
* [https://github.com/shaleny/lazyfoo shaleny LazyFoo SDL examples] translated to Haskell/Yampa (lecture 16-)<br />
* References: [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk/src/foo.ps ps], [http://lambdor.net/wp-content/uploads/2010/12/AFRP-Reference.pdf pdf]<br />
* Videos<br />
** [http://vimeo.com/6632457 Safe Functional Reactive Programming through Dependent Types]<br />
** [http://vimeo.com/6652662 Causal Commutative Arrows and Their Optimization]<br />
** [http://www.youtube.com/watch?v=xtmo6Bmfahc Euterpea: From signals to symphonies]<br />
<br />
== Primitive signal functions ==<br />
<br />
[[Image:Yampa signal functions.png|768px]]<br />
<br />
(download original [[:Image:Yampa signal functions.svg]])<br />
<br />
== Switches ==<br />
<br />
* [[Yampa/switch|switch]]<br />
* [[Yampa/rSwitch|rSwitch]]<br />
* [[Yampa/rSwitch|kSwitch]]<br />
* [[Yampa/pSwitchB|pSwitchB]]<br />
* [[Yampa/pSwitch|pSwitch]]<br />
* [[Yampa/rpSwitchB|rpSwitchB]]<br />
* [[Yampa/rpSwitch|rpSwitch]]<br />
<br />
Each switch comes in two different flavors:<br />
# ''immediate'': switch to the new behaviour immediately and also calculate the return value based on the new behaviour.<br />
# ''delayed'': return the value based on the old behaviour, but use the new behaviour afterwards. To use delayed switch prefix the switching functions with the letter 'd', f.e. 'drpSwitchB'.<br />
<br />
== Reactimation ==<br />
<br />
* [[Yampa/reactimate|reactimate]]<br />
* [[Yampa/game_engine|Game engine]]<br />
<br />
== External Links ==<br />
<br />
* [http://mailman.cs.yale.edu/mailman/listinfo/yampa-users Yampa-Users mailing list] - Yampa-related comments, questions, discussions, and announcements. You can also send bug reports to [mailto:yampa-bugs@cs.yale.edu yampa-bugs@cs.yale.edu].<br />
* [http://www.cs.nott.ac.uk/~ggg/ George Giorgidze] created YampaSynth, a modular music synthesizer written in Haskell and using Yampa.<br />
* [http://www.cs.yale.edu/homes/hl293] - Hai (Paul) Liu papers and slides<br />
* [http://lambdor.net Blog about Yampa] - introduction tutorials and diagrams<br />
* [http://blog.edwardamsden.com/2011/03/demonstrating-time-leak-in-arrowized.html Demonstrating a Time Leak in Arrowized FRP]<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2011-April/000409.html answer]<br />
<br />
== Known users ==<br />
<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/YampaSynth YampaSynth] - is a software synthesizer implemented in Haskell using Yampa. It contains a framework of sound generating and sound shaping modules (e.g. oscillator, amplifier, mixer, envelope generator, filter, etc.) and example applications.<br />
* [http://www.haskell.org/haskellwiki/Frag Frag]; a simple Quake 3 clone, using a very early version of Yampa called arrowized functional reactive programming (AFRP)<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/SpaceInvaders Space Invaders]; a video game, demonstrating the usage of Yampa<br />
* [http://haskell.cs.yale.edu/?page_id=376 Nettle] - Programming Network Routers<br />
* [http://haskell.cs.yale.edu/?page_id=103 Euterpea] - computer music development (also uses [[CCA]])<br />
<br />
== Known forks ==<br />
<br />
* [https://github.com/eamsden/Animas Animas]<br />
** code cleanup<br />
** [http://blog.edwardamsden.com/ Facts and Theories] blog by Edward Amsden<br />
* [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk FRVR]<br />
** restructuring of modules<br />
** [http://imve.informatik.uni-hamburg.de/projects/DIVE DIVE project]<br />
** [http://imve.informatik.uni-hamburg.de/files/71-Blom-Diss-online.pdf Kristopher J. Blom - Dynamic, Interactive Virtual Environments] section 8.3<br />
<br />
[[Category:FRP]]<br />
[[Category:Arrow]]</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa&diff=40791Yampa2011-07-02T19:41:26Z<p>GeroldMeisinger: /* Introduction */</p>
<hr />
<div>Yampa is a domain-specific embedded language for the programming of hybrid (discrete and continuous time) systems using the concepts of [[Functional Reactive Programming]] (FRP). Yampa is structured using [[Arrow]]s, which greatly reduce the chance of introducing space- and time-leaks into reactive, time-varying systems.<br />
<br />
Yampa was originally developed by the [http://haskell.cs.yale.edu/ Yale Haskell Group] based on the original idea of [http://www.conal.net Conal Elliott's] [[Fran]].<br />
<br />
'''[https://github.com/eamsden/Animas Download Animas]''' (most up to date Yampa fork, or [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Yampa download original Yampa])<br />
<br />
== Introduction ==<br />
<br />
* [http://www.cs.nott.ac.uk/~nhn/FoPAD2007/Talks/nhn-FoPAD2007.pdf Henrik Nilsson - A Brief Introduction to Functional Reactive Programming and Yampa]<br />
* [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/ Henrik Nilsson - ITU-FRP2010]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture01.pdf ITU-FRP2010 01]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture02.pdf ITU-FRP2010 02]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture03.pdf ITU-FRP2010 03]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture04.pdf ITU-FRP2010 04]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture05.pdf ITU-FRP2010 05]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture06.pdf ITU-FRP2010 06]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture07.pdf ITU-FRP2010 07]<br />
* [http://plucky.cs.yale.edu/CS429F04/LectureSlides/YampaForCs429.ppt Paul Hudak - Yampa, Arrows, and Robots]<br />
* Yampa tutorials by [http://lambdor.net Gerold Meisinger]<br />
** [http://lambdor.net/?p=34 Running primitive signal functions in Yampa]<br />
** [http://lambdor.net/?p=59 Yampa/SDL program stub]<br />
** [http://lambdor.net/?p=44 Learning Yampa and Functional Reactive Programming]<br />
** [http://lambdor.net/?p=209 Diagrams of Yampa switches]<br />
** [http://lambdor.net/?p=117 Dataflow diagram of Yampa reactimate]<br />
** [http://lambdor.net/?p=113 Activity diagram of Yampa reactimate]<br />
* [p <br />
* References: [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk/src/foo.ps ps], [http://lambdor.net/wp-content/uploads/2010/12/AFRP-Reference.pdf pdf]<br />
* Videos<br />
** [http://vimeo.com/6632457 Safe Functional Reactive Programming through Dependent Types]<br />
** [http://vimeo.com/6652662 Causal Commutative Arrows and Their Optimization]<br />
** [http://www.youtube.com/watch?v=xtmo6Bmfahc Euterpea: From signals to symphonies]<br />
<br />
== Primitive signal functions ==<br />
<br />
[[Image:Yampa signal functions.png|768px]]<br />
<br />
(download original [[:Image:Yampa signal functions.svg]])<br />
<br />
== Switches ==<br />
<br />
* [[Yampa/switch|switch]]<br />
* [[Yampa/rSwitch|rSwitch]]<br />
* [[Yampa/rSwitch|kSwitch]]<br />
* [[Yampa/pSwitchB|pSwitchB]]<br />
* [[Yampa/pSwitch|pSwitch]]<br />
* [[Yampa/rpSwitchB|rpSwitchB]]<br />
* [[Yampa/rpSwitch|rpSwitch]]<br />
<br />
Each switch comes in two different flavors:<br />
# ''immediate'': switch to the new behaviour immediately and also calculate the return value based on the new behaviour.<br />
# ''delayed'': return the value based on the old behaviour, but use the new behaviour afterwards. To use delayed switch prefix the switching functions with the letter 'd', f.e. 'drpSwitchB'.<br />
<br />
== Reactimation ==<br />
<br />
* [[Yampa/reactimate|reactimate]]<br />
* [[Yampa/game_engine|Game engine]]<br />
<br />
== External Links ==<br />
<br />
* [http://mailman.cs.yale.edu/mailman/listinfo/yampa-users Yampa-Users mailing list] - Yampa-related comments, questions, discussions, and announcements. You can also send bug reports to [mailto:yampa-bugs@cs.yale.edu yampa-bugs@cs.yale.edu].<br />
* [http://www.cs.nott.ac.uk/~ggg/ George Giorgidze] created YampaSynth, a modular music synthesizer written in Haskell and using Yampa.<br />
* [http://www.cs.yale.edu/homes/hl293] - Hai (Paul) Liu papers and slides<br />
* [http://lambdor.net Blog about Yampa] - introduction tutorials and diagrams<br />
* [http://blog.edwardamsden.com/2011/03/demonstrating-time-leak-in-arrowized.html Demonstrating a Time Leak in Arrowized FRP]<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2011-April/000409.html answer]<br />
<br />
== Known users ==<br />
<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/YampaSynth YampaSynth] - is a software synthesizer implemented in Haskell using Yampa. It contains a framework of sound generating and sound shaping modules (e.g. oscillator, amplifier, mixer, envelope generator, filter, etc.) and example applications.<br />
* [http://www.haskell.org/haskellwiki/Frag Frag]; a simple Quake 3 clone, using a very early version of Yampa called arrowized functional reactive programming (AFRP)<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/SpaceInvaders Space Invaders]; a video game, demonstrating the usage of Yampa<br />
* [http://haskell.cs.yale.edu/?page_id=376 Nettle] - Programming Network Routers<br />
* [http://haskell.cs.yale.edu/?page_id=103 Euterpea] - computer music development (also uses [[CCA]])<br />
<br />
== Known forks ==<br />
<br />
* [https://github.com/eamsden/Animas Animas]<br />
** code cleanup<br />
** [http://blog.edwardamsden.com/ Facts and Theories] blog by Edward Amsden<br />
* [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk FRVR]<br />
** restructuring of modules<br />
** [http://imve.informatik.uni-hamburg.de/projects/DIVE DIVE project]<br />
** [http://imve.informatik.uni-hamburg.de/files/71-Blom-Diss-online.pdf Kristopher J. Blom - Dynamic, Interactive Virtual Environments] section 8.3<br />
<br />
[[Category:FRP]]<br />
[[Category:Arrow]]</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa&diff=40787Yampa2011-07-02T10:08:00Z<p>GeroldMeisinger: /* Known users */</p>
<hr />
<div>Yampa is a domain-specific embedded language for the programming of hybrid (discrete and continuous time) systems using the concepts of [[Functional Reactive Programming]] (FRP). Yampa is structured using [[Arrow]]s, which greatly reduce the chance of introducing space- and time-leaks into reactive, time-varying systems.<br />
<br />
Yampa was originally developed by the [http://haskell.cs.yale.edu/ Yale Haskell Group] based on the original idea of [http://www.conal.net Conal Elliott's] [[Fran]].<br />
<br />
'''[https://github.com/eamsden/Animas Download Animas]''' (most up to date Yampa fork, or [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Yampa download original Yampa])<br />
<br />
== Introduction ==<br />
<br />
* [http://www.cs.nott.ac.uk/~nhn/FoPAD2007/Talks/nhn-FoPAD2007.pdf Henrik Nilsson - A Brief Introduction to Functional Reactive Programming and Yampa]<br />
* [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/ Henrik Nilsson - ITU-FRP2010]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture01.pdf ITU-FRP2010 01]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture02.pdf ITU-FRP2010 02]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture03.pdf ITU-FRP2010 03]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture04.pdf ITU-FRP2010 04]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture05.pdf ITU-FRP2010 05]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture06.pdf ITU-FRP2010 06]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture07.pdf ITU-FRP2010 07]<br />
* [http://plucky.cs.yale.edu/CS429F04/LectureSlides/YampaForCs429.ppt Paul Hudak - Yampa, Arrows, and Robots]<br />
* Yampa tutorials by [http://lambdor.net Gerold Meisinger]<br />
** [http://lambdor.net/?p=34 Running primitive signal functions in Yampa]<br />
** [http://lambdor.net/?p=59 Yampa/SDL program stub]<br />
** [http://lambdor.net/?p=44 Learning Yampa and Functional Reactive Programming]<br />
** [http://lambdor.net/?p=209 Diagrams of Yampa switches]<br />
** [http://lambdor.net/?p=117 Dataflow diagram of Yampa reactimate]<br />
** [http://lambdor.net/?p=113 Activity diagram of Yampa reactimate]<br />
* References: [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk/src/foo.ps ps], [http://lambdor.net/wp-content/uploads/2010/12/AFRP-Reference.pdf pdf]<br />
* Videos<br />
** [http://vimeo.com/6632457 Safe Functional Reactive Programming through Dependent Types]<br />
** [http://vimeo.com/6652662 Causal Commutative Arrows and Their Optimization]<br />
** [http://www.youtube.com/watch?v=xtmo6Bmfahc Euterpea: From signals to symphonies]<br />
<br />
== Primitive signal functions ==<br />
<br />
[[Image:Yampa signal functions.png|768px]]<br />
<br />
(download original [[:Image:Yampa signal functions.svg]])<br />
<br />
== Switches ==<br />
<br />
* [[Yampa/switch|switch]]<br />
* [[Yampa/rSwitch|rSwitch]]<br />
* [[Yampa/rSwitch|kSwitch]]<br />
* [[Yampa/pSwitchB|pSwitchB]]<br />
* [[Yampa/pSwitch|pSwitch]]<br />
* [[Yampa/rpSwitchB|rpSwitchB]]<br />
* [[Yampa/rpSwitch|rpSwitch]]<br />
<br />
Each switch comes in two different flavors:<br />
# ''immediate'': switch to the new behaviour immediately and also calculate the return value based on the new behaviour.<br />
# ''delayed'': return the value based on the old behaviour, but use the new behaviour afterwards. To use delayed switch prefix the switching functions with the letter 'd', f.e. 'drpSwitchB'.<br />
<br />
== Reactimation ==<br />
<br />
* [[Yampa/reactimate|reactimate]]<br />
* [[Yampa/game_engine|Game engine]]<br />
<br />
== External Links ==<br />
<br />
* [http://mailman.cs.yale.edu/mailman/listinfo/yampa-users Yampa-Users mailing list] - Yampa-related comments, questions, discussions, and announcements. You can also send bug reports to [mailto:yampa-bugs@cs.yale.edu yampa-bugs@cs.yale.edu].<br />
* [http://www.cs.nott.ac.uk/~ggg/ George Giorgidze] created YampaSynth, a modular music synthesizer written in Haskell and using Yampa.<br />
* [http://www.cs.yale.edu/homes/hl293] - Hai (Paul) Liu papers and slides<br />
* [http://lambdor.net Blog about Yampa] - introduction tutorials and diagrams<br />
* [http://blog.edwardamsden.com/2011/03/demonstrating-time-leak-in-arrowized.html Demonstrating a Time Leak in Arrowized FRP]<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2011-April/000409.html answer]<br />
<br />
== Known users ==<br />
<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/YampaSynth YampaSynth] - is a software synthesizer implemented in Haskell using Yampa. It contains a framework of sound generating and sound shaping modules (e.g. oscillator, amplifier, mixer, envelope generator, filter, etc.) and example applications.<br />
* [http://www.haskell.org/haskellwiki/Frag Frag]; a simple Quake 3 clone, using a very early version of Yampa called arrowized functional reactive programming (AFRP)<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/SpaceInvaders Space Invaders]; a video game, demonstrating the usage of Yampa<br />
* [http://haskell.cs.yale.edu/?page_id=376 Nettle] - Programming Network Routers<br />
* [http://haskell.cs.yale.edu/?page_id=103 Euterpea] - computer music development (also uses [[CCA]])<br />
<br />
== Known forks ==<br />
<br />
* [https://github.com/eamsden/Animas Animas]<br />
** code cleanup<br />
** [http://blog.edwardamsden.com/ Facts and Theories] blog by Edward Amsden<br />
* [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk FRVR]<br />
** restructuring of modules<br />
** [http://imve.informatik.uni-hamburg.de/projects/DIVE DIVE project]<br />
** [http://imve.informatik.uni-hamburg.de/files/71-Blom-Diss-online.pdf Kristopher J. Blom - Dynamic, Interactive Virtual Environments] section 8.3<br />
<br />
[[Category:FRP]]<br />
[[Category:Arrow]]</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa&diff=40786Yampa2011-07-02T10:05:42Z<p>GeroldMeisinger: </p>
<hr />
<div>Yampa is a domain-specific embedded language for the programming of hybrid (discrete and continuous time) systems using the concepts of [[Functional Reactive Programming]] (FRP). Yampa is structured using [[Arrow]]s, which greatly reduce the chance of introducing space- and time-leaks into reactive, time-varying systems.<br />
<br />
Yampa was originally developed by the [http://haskell.cs.yale.edu/ Yale Haskell Group] based on the original idea of [http://www.conal.net Conal Elliott's] [[Fran]].<br />
<br />
'''[https://github.com/eamsden/Animas Download Animas]''' (most up to date Yampa fork, or [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Yampa download original Yampa])<br />
<br />
== Introduction ==<br />
<br />
* [http://www.cs.nott.ac.uk/~nhn/FoPAD2007/Talks/nhn-FoPAD2007.pdf Henrik Nilsson - A Brief Introduction to Functional Reactive Programming and Yampa]<br />
* [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/ Henrik Nilsson - ITU-FRP2010]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture01.pdf ITU-FRP2010 01]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture02.pdf ITU-FRP2010 02]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture03.pdf ITU-FRP2010 03]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture04.pdf ITU-FRP2010 04]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture05.pdf ITU-FRP2010 05]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture06.pdf ITU-FRP2010 06]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture07.pdf ITU-FRP2010 07]<br />
* [http://plucky.cs.yale.edu/CS429F04/LectureSlides/YampaForCs429.ppt Paul Hudak - Yampa, Arrows, and Robots]<br />
* Yampa tutorials by [http://lambdor.net Gerold Meisinger]<br />
** [http://lambdor.net/?p=34 Running primitive signal functions in Yampa]<br />
** [http://lambdor.net/?p=59 Yampa/SDL program stub]<br />
** [http://lambdor.net/?p=44 Learning Yampa and Functional Reactive Programming]<br />
** [http://lambdor.net/?p=209 Diagrams of Yampa switches]<br />
** [http://lambdor.net/?p=117 Dataflow diagram of Yampa reactimate]<br />
** [http://lambdor.net/?p=113 Activity diagram of Yampa reactimate]<br />
* References: [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk/src/foo.ps ps], [http://lambdor.net/wp-content/uploads/2010/12/AFRP-Reference.pdf pdf]<br />
* Videos<br />
** [http://vimeo.com/6632457 Safe Functional Reactive Programming through Dependent Types]<br />
** [http://vimeo.com/6652662 Causal Commutative Arrows and Their Optimization]<br />
** [http://www.youtube.com/watch?v=xtmo6Bmfahc Euterpea: From signals to symphonies]<br />
<br />
== Primitive signal functions ==<br />
<br />
[[Image:Yampa signal functions.png|768px]]<br />
<br />
(download original [[:Image:Yampa signal functions.svg]])<br />
<br />
== Switches ==<br />
<br />
* [[Yampa/switch|switch]]<br />
* [[Yampa/rSwitch|rSwitch]]<br />
* [[Yampa/rSwitch|kSwitch]]<br />
* [[Yampa/pSwitchB|pSwitchB]]<br />
* [[Yampa/pSwitch|pSwitch]]<br />
* [[Yampa/rpSwitchB|rpSwitchB]]<br />
* [[Yampa/rpSwitch|rpSwitch]]<br />
<br />
Each switch comes in two different flavors:<br />
# ''immediate'': switch to the new behaviour immediately and also calculate the return value based on the new behaviour.<br />
# ''delayed'': return the value based on the old behaviour, but use the new behaviour afterwards. To use delayed switch prefix the switching functions with the letter 'd', f.e. 'drpSwitchB'.<br />
<br />
== Reactimation ==<br />
<br />
* [[Yampa/reactimate|reactimate]]<br />
* [[Yampa/game_engine|Game engine]]<br />
<br />
== External Links ==<br />
<br />
* [http://mailman.cs.yale.edu/mailman/listinfo/yampa-users Yampa-Users mailing list] - Yampa-related comments, questions, discussions, and announcements. You can also send bug reports to [mailto:yampa-bugs@cs.yale.edu yampa-bugs@cs.yale.edu].<br />
* [http://www.cs.nott.ac.uk/~ggg/ George Giorgidze] created YampaSynth, a modular music synthesizer written in Haskell and using Yampa.<br />
* [http://www.cs.yale.edu/homes/hl293] - Hai (Paul) Liu papers and slides<br />
* [http://lambdor.net Blog about Yampa] - introduction tutorials and diagrams<br />
* [http://blog.edwardamsden.com/2011/03/demonstrating-time-leak-in-arrowized.html Demonstrating a Time Leak in Arrowized FRP]<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2011-April/000409.html answer]<br />
<br />
== Known users ==<br />
<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/YampaSynth YampaSynth] - is a software synthesizer implemented in Haskell using Yampa. It contains a framework of sound generating and sound shaping modules (e.g. oscillator, amplifier, mixer, envelope generator, filter, etc.) and example applications.<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/SpaceInvaders Space Invaders]; a video game, demonstrating the usage of Yampa<br />
* [http://haskell.cs.yale.edu/?page_id=376 Nettle] - Programming Network Routers<br />
* [http://haskell.cs.yale.edu/?page_id=103 Euterpea] - computer music development (also uses [[CCA]])<br />
<br />
== Known forks ==<br />
<br />
* [https://github.com/eamsden/Animas Animas]<br />
** code cleanup<br />
** [http://blog.edwardamsden.com/ Facts and Theories] blog by Edward Amsden<br />
* [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk FRVR]<br />
** restructuring of modules<br />
** [http://imve.informatik.uni-hamburg.de/projects/DIVE DIVE project]<br />
** [http://imve.informatik.uni-hamburg.de/files/71-Blom-Diss-online.pdf Kristopher J. Blom - Dynamic, Interactive Virtual Environments] section 8.3<br />
<br />
[[Category:FRP]]<br />
[[Category:Arrow]]</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa&diff=40785Yampa2011-07-02T10:05:11Z<p>GeroldMeisinger: </p>
<hr />
<div>Yampa is a domain-specific embedded language for the programming of hybrid (discrete and continuous time) systems using the concepts of [[Functional Reactive Programming]] (FRP). Yampa is structured using [[Arrow]]s, which greatly reduce the chance of introducing space- and time-leaks into reactive, time-varying systems.<br />
<br />
Yampa was originally developed by the [http://haskell.cs.yale.edu/ Yale Haskell Group] based on the original idea of [http://www.conal.net Conal Elliott's] [[Fran]].<br />
<br />
'''[https://github.com/eamsden/Animas Download Animas''' (most up to date Yampa fork, or [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Yampa download original Yampa])<br />
<br />
== Introduction ==<br />
<br />
* [http://www.cs.nott.ac.uk/~nhn/FoPAD2007/Talks/nhn-FoPAD2007.pdf Henrik Nilsson - A Brief Introduction to Functional Reactive Programming and Yampa]<br />
* [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/ Henrik Nilsson - ITU-FRP2010]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture01.pdf ITU-FRP2010 01]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture02.pdf ITU-FRP2010 02]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture03.pdf ITU-FRP2010 03]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture04.pdf ITU-FRP2010 04]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture05.pdf ITU-FRP2010 05]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture06.pdf ITU-FRP2010 06]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture07.pdf ITU-FRP2010 07]<br />
* [http://plucky.cs.yale.edu/CS429F04/LectureSlides/YampaForCs429.ppt Paul Hudak - Yampa, Arrows, and Robots]<br />
* Yampa tutorials by [http://lambdor.net Gerold Meisinger]<br />
** [http://lambdor.net/?p=34 Running primitive signal functions in Yampa]<br />
** [http://lambdor.net/?p=59 Yampa/SDL program stub]<br />
** [http://lambdor.net/?p=44 Learning Yampa and Functional Reactive Programming]<br />
** [http://lambdor.net/?p=209 Diagrams of Yampa switches]<br />
** [http://lambdor.net/?p=117 Dataflow diagram of Yampa reactimate]<br />
** [http://lambdor.net/?p=113 Activity diagram of Yampa reactimate]<br />
* References: [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk/src/foo.ps ps], [http://lambdor.net/wp-content/uploads/2010/12/AFRP-Reference.pdf pdf]<br />
* Videos<br />
** [http://vimeo.com/6632457 Safe Functional Reactive Programming through Dependent Types]<br />
** [http://vimeo.com/6652662 Causal Commutative Arrows and Their Optimization]<br />
** [http://www.youtube.com/watch?v=xtmo6Bmfahc Euterpea: From signals to symphonies]<br />
<br />
== Primitive signal functions ==<br />
<br />
[[Image:Yampa signal functions.png|768px]]<br />
<br />
(download original [[:Image:Yampa signal functions.svg]])<br />
<br />
== Switches ==<br />
<br />
* [[Yampa/switch|switch]]<br />
* [[Yampa/rSwitch|rSwitch]]<br />
* [[Yampa/rSwitch|kSwitch]]<br />
* [[Yampa/pSwitchB|pSwitchB]]<br />
* [[Yampa/pSwitch|pSwitch]]<br />
* [[Yampa/rpSwitchB|rpSwitchB]]<br />
* [[Yampa/rpSwitch|rpSwitch]]<br />
<br />
Each switch comes in two different flavors:<br />
# ''immediate'': switch to the new behaviour immediately and also calculate the return value based on the new behaviour.<br />
# ''delayed'': return the value based on the old behaviour, but use the new behaviour afterwards. To use delayed switch prefix the switching functions with the letter 'd', f.e. 'drpSwitchB'.<br />
<br />
== Reactimation ==<br />
<br />
* [[Yampa/reactimate|reactimate]]<br />
* [[Yampa/game_engine|Game engine]]<br />
<br />
== External Links ==<br />
<br />
* [http://mailman.cs.yale.edu/mailman/listinfo/yampa-users Yampa-Users mailing list] - Yampa-related comments, questions, discussions, and announcements. You can also send bug reports to [mailto:yampa-bugs@cs.yale.edu yampa-bugs@cs.yale.edu].<br />
* [http://www.cs.nott.ac.uk/~ggg/ George Giorgidze] created YampaSynth, a modular music synthesizer written in Haskell and using Yampa.<br />
* [http://www.cs.yale.edu/homes/hl293] - Hai (Paul) Liu papers and slides<br />
* [http://lambdor.net Blog about Yampa] - introduction tutorials and diagrams<br />
* [http://blog.edwardamsden.com/2011/03/demonstrating-time-leak-in-arrowized.html Demonstrating a Time Leak in Arrowized FRP]<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2011-April/000409.html answer]<br />
<br />
== Known users ==<br />
<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/YampaSynth YampaSynth] - is a software synthesizer implemented in Haskell using Yampa. It contains a framework of sound generating and sound shaping modules (e.g. oscillator, amplifier, mixer, envelope generator, filter, etc.) and example applications.<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/SpaceInvaders Space Invaders]; a video game, demonstrating the usage of Yampa<br />
* [http://haskell.cs.yale.edu/?page_id=376 Nettle] - Programming Network Routers<br />
* [http://haskell.cs.yale.edu/?page_id=103 Euterpea] - computer music development (also uses [[CCA]])<br />
<br />
== Known forks ==<br />
<br />
* [https://github.com/eamsden/Animas Animas]<br />
** code cleanup<br />
** [http://blog.edwardamsden.com/ Facts and Theories] blog by Edward Amsden<br />
* [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk FRVR]<br />
** restructuring of modules<br />
** [http://imve.informatik.uni-hamburg.de/projects/DIVE DIVE project]<br />
** [http://imve.informatik.uni-hamburg.de/files/71-Blom-Diss-online.pdf Kristopher J. Blom - Dynamic, Interactive Virtual Environments] section 8.3<br />
<br />
[[Category:FRP]]<br />
[[Category:Arrow]]</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa&diff=40784Yampa2011-07-02T10:04:14Z<p>GeroldMeisinger: </p>
<hr />
<div>Yampa is a domain-specific embedded language for the programming of hybrid (discrete and continuous time) systems using the concepts of [[Functional Reactive Programming]] (FRP). Yampa is structured using [[Arrow]]s, which greatly reduce the chance of introducing space- and time-leaks into reactive, time-varying systems.<br />
<br />
Yampa was originally developed by the [http://haskell.cs.yale.edu/ Yale Haskell Group] based on the original idea of [http://www.conal.net Conal Elliott's] [[Fran]].<br />
<br />
'''Download [https://github.com/eamsden/Animas Animas (most up to date Yampa fork)''' ([http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Yampa original Yampa])<br />
<br />
== Introduction ==<br />
<br />
* [http://www.cs.nott.ac.uk/~nhn/FoPAD2007/Talks/nhn-FoPAD2007.pdf Henrik Nilsson - A Brief Introduction to Functional Reactive Programming and Yampa]<br />
* [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/ Henrik Nilsson - ITU-FRP2010]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture01.pdf ITU-FRP2010 01]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture02.pdf ITU-FRP2010 02]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture03.pdf ITU-FRP2010 03]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture04.pdf ITU-FRP2010 04]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture05.pdf ITU-FRP2010 05]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture06.pdf ITU-FRP2010 06]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture07.pdf ITU-FRP2010 07]<br />
* [http://plucky.cs.yale.edu/CS429F04/LectureSlides/YampaForCs429.ppt Paul Hudak - Yampa, Arrows, and Robots]<br />
* Yampa tutorials by [http://lambdor.net Gerold Meisinger]<br />
** [http://lambdor.net/?p=34 Running primitive signal functions in Yampa]<br />
** [http://lambdor.net/?p=59 Yampa/SDL program stub]<br />
** [http://lambdor.net/?p=44 Learning Yampa and Functional Reactive Programming]<br />
** [http://lambdor.net/?p=209 Diagrams of Yampa switches]<br />
** [http://lambdor.net/?p=117 Dataflow diagram of Yampa reactimate]<br />
** [http://lambdor.net/?p=113 Activity diagram of Yampa reactimate]<br />
* References: [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk/src/foo.ps ps], [http://lambdor.net/wp-content/uploads/2010/12/AFRP-Reference.pdf pdf]<br />
* Videos<br />
** [http://vimeo.com/6632457 Safe Functional Reactive Programming through Dependent Types]<br />
** [http://vimeo.com/6652662 Causal Commutative Arrows and Their Optimization]<br />
** [http://www.youtube.com/watch?v=xtmo6Bmfahc Euterpea: From signals to symphonies]<br />
<br />
== Primitive signal functions ==<br />
<br />
[[Image:Yampa signal functions.png|768px]]<br />
<br />
(download original [[:Image:Yampa signal functions.svg]])<br />
<br />
== Switches ==<br />
<br />
* [[Yampa/switch|switch]]<br />
* [[Yampa/rSwitch|rSwitch]]<br />
* [[Yampa/rSwitch|kSwitch]]<br />
* [[Yampa/pSwitchB|pSwitchB]]<br />
* [[Yampa/pSwitch|pSwitch]]<br />
* [[Yampa/rpSwitchB|rpSwitchB]]<br />
* [[Yampa/rpSwitch|rpSwitch]]<br />
<br />
Each switch comes in two different flavors:<br />
# ''immediate'': switch to the new behaviour immediately and also calculate the return value based on the new behaviour.<br />
# ''delayed'': return the value based on the old behaviour, but use the new behaviour afterwards. To use delayed switch prefix the switching functions with the letter 'd', f.e. 'drpSwitchB'.<br />
<br />
== Reactimation ==<br />
<br />
* [[Yampa/reactimate|reactimate]]<br />
* [[Yampa/game_engine|Game engine]]<br />
<br />
== External Links ==<br />
<br />
* [http://mailman.cs.yale.edu/mailman/listinfo/yampa-users Yampa-Users mailing list] - Yampa-related comments, questions, discussions, and announcements. You can also send bug reports to [mailto:yampa-bugs@cs.yale.edu yampa-bugs@cs.yale.edu].<br />
* [http://www.cs.nott.ac.uk/~ggg/ George Giorgidze] created YampaSynth, a modular music synthesizer written in Haskell and using Yampa.<br />
* [http://www.cs.yale.edu/homes/hl293] - Hai (Paul) Liu papers and slides<br />
* [http://lambdor.net Blog about Yampa] - introduction tutorials and diagrams<br />
* [http://blog.edwardamsden.com/2011/03/demonstrating-time-leak-in-arrowized.html Demonstrating a Time Leak in Arrowized FRP]<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2011-April/000409.html answer]<br />
<br />
== Known users ==<br />
<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/YampaSynth YampaSynth] - is a software synthesizer implemented in Haskell using Yampa. It contains a framework of sound generating and sound shaping modules (e.g. oscillator, amplifier, mixer, envelope generator, filter, etc.) and example applications.<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/SpaceInvaders Space Invaders]; a video game, demonstrating the usage of Yampa<br />
* [http://haskell.cs.yale.edu/?page_id=376 Nettle] - Programming Network Routers<br />
* [http://haskell.cs.yale.edu/?page_id=103 Euterpea] - computer music development (also uses [[CCA]])<br />
<br />
== Known forks ==<br />
<br />
* [https://github.com/eamsden/Animas Animas]<br />
** code cleanup<br />
** [http://blog.edwardamsden.com/ Facts and Theories] blog by Edward Amsden<br />
* [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk FRVR]<br />
** restructuring of modules<br />
** [http://imve.informatik.uni-hamburg.de/projects/DIVE DIVE project]<br />
** [http://imve.informatik.uni-hamburg.de/files/71-Blom-Diss-online.pdf Kristopher J. Blom - Dynamic, Interactive Virtual Environments] section 8.3<br />
<br />
[[Category:FRP]]<br />
[[Category:Arrow]]</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa&diff=40783Yampa2011-07-02T10:01:22Z<p>GeroldMeisinger: </p>
<hr />
<div>Yampa is a domain-specific embedded language for the programming of hybrid (discrete and continuous time) systems using the concepts of [[Functional Reactive Programming]] (FRP). Yampa is structured using [[Arrow]]s, which greatly reduce the chance of introducing space- and time-leaks into reactive, time-varying systems.<br />
<br />
Yampa was originally developed by the [http://haskell.cs.yale.edu/ Yale Haskell Group] based on the original idea of [http://www.conal.net Conal Elliott's] [[Fran]].<br />
<br />
'''[http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Yampa Download Yampa]'''<br />
<br />
== Introduction ==<br />
<br />
* [http://www.cs.nott.ac.uk/~nhn/FoPAD2007/Talks/nhn-FoPAD2007.pdf Henrik Nilsson - A Brief Introduction to Functional Reactive Programming and Yampa]<br />
* [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/ Henrik Nilsson - ITU-FRP2010]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture01.pdf ITU-FRP2010 01]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture02.pdf ITU-FRP2010 02]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture03.pdf ITU-FRP2010 03]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture04.pdf ITU-FRP2010 04]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture05.pdf ITU-FRP2010 05]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture06.pdf ITU-FRP2010 06]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture07.pdf ITU-FRP2010 07]<br />
* [http://plucky.cs.yale.edu/CS429F04/LectureSlides/YampaForCs429.ppt Paul Hudak - Yampa, Arrows, and Robots]<br />
* Yampa tutorials by [http://lambdor.net Gerold Meisinger]<br />
** [http://lambdor.net/?p=34 Running primitive signal functions in Yampa]<br />
** [http://lambdor.net/?p=59 Yampa/SDL program stub]<br />
** [http://lambdor.net/?p=44 Learning Yampa and Functional Reactive Programming]<br />
** [http://lambdor.net/?p=209 Diagrams of Yampa switches]<br />
** [http://lambdor.net/?p=117 Dataflow diagram of Yampa reactimate]<br />
** [http://lambdor.net/?p=113 Activity diagram of Yampa reactimate]<br />
* References: [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk/src/foo.ps ps], [http://lambdor.net/wp-content/uploads/2010/12/AFRP-Reference.pdf pdf]<br />
* Videos<br />
** [http://vimeo.com/6632457 Safe Functional Reactive Programming through Dependent Types]<br />
** [http://vimeo.com/6652662 Causal Commutative Arrows and Their Optimization]<br />
** [http://www.youtube.com/watch?v=xtmo6Bmfahc Euterpea: From signals to symphonies]<br />
<br />
== Primitive signal functions ==<br />
<br />
[[Image:Yampa signal functions.png|768px]]<br />
<br />
(download original [[:Image:Yampa signal functions.svg]])<br />
<br />
== Switches ==<br />
<br />
* [[Yampa/switch|switch]]<br />
* [[Yampa/rSwitch|rSwitch]]<br />
* [[Yampa/rSwitch|kSwitch]]<br />
* [[Yampa/pSwitchB|pSwitchB]]<br />
* [[Yampa/pSwitch|pSwitch]]<br />
* [[Yampa/rpSwitchB|rpSwitchB]]<br />
* [[Yampa/rpSwitch|rpSwitch]]<br />
<br />
Each switch comes in two different flavors:<br />
# ''immediate'': switch to the new behaviour immediately and also calculate the return value based on the new behaviour.<br />
# ''delayed'': return the value based on the old behaviour, but use the new behaviour afterwards. To use delayed switch prefix the switching functions with the letter 'd', f.e. 'drpSwitchB'.<br />
<br />
== Reactimation ==<br />
<br />
* [[Yampa/reactimate|reactimate]]<br />
* [[Yampa/game_engine|Game engine]]<br />
<br />
== External Links ==<br />
<br />
* [http://mailman.cs.yale.edu/mailman/listinfo/yampa-users Yampa-Users mailing list] - Yampa-related comments, questions, discussions, and announcements. You can also send bug reports to [mailto:yampa-bugs@cs.yale.edu yampa-bugs@cs.yale.edu].<br />
* [http://www.cs.nott.ac.uk/~ggg/ George Giorgidze] created YampaSynth, a modular music synthesizer written in Haskell and using Yampa.<br />
* [http://www.cs.yale.edu/homes/hl293] - Hai (Paul) Liu papers and slides<br />
* [http://lambdor.net Blog about Yampa] - introduction tutorials and diagrams<br />
* [http://blog.edwardamsden.com/2011/03/demonstrating-time-leak-in-arrowized.html Demonstrating a Time Leak in Arrowized FRP]<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2011-April/000409.html answer]<br />
<br />
== Known users ==<br />
<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/YampaSynth YampaSynth] - is a software synthesizer implemented in Haskell using Yampa. It contains a framework of sound generating and sound shaping modules (e.g. oscillator, amplifier, mixer, envelope generator, filter, etc.) and example applications.<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/SpaceInvaders Space Invaders]; a video game, demonstrating the usage of Yampa<br />
* [http://haskell.cs.yale.edu/?page_id=376 Nettle] - Programming Network Routers<br />
* [http://haskell.cs.yale.edu/?page_id=103 Euterpea] - computer music development (also uses [[CCA]])<br />
<br />
== Known forks ==<br />
<br />
* [https://github.com/eamsden/Animas Animas]<br />
** code cleanup<br />
** [http://blog.edwardamsden.com/ Facts and Theories] blog by Edward Amsden<br />
* [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk FRVR]<br />
** restructuring of modules<br />
** [http://imve.informatik.uni-hamburg.de/projects/DIVE DIVE project]<br />
** [http://imve.informatik.uni-hamburg.de/files/71-Blom-Diss-online.pdf Kristopher J. Blom - Dynamic, Interactive Virtual Environments] section 8.3<br />
<br />
[[Category:FRP]]<br />
[[Category:Arrow]]</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa&diff=40782Yampa2011-07-02T10:01:02Z<p>GeroldMeisinger: </p>
<hr />
<div>Yampa is a domain-specific embedded language for the programming of hybrid (discrete and continuous time) systems using the concepts of [[Functional Reactive Programming]] (FRP). Yampa is structured using [[Arrow]]s, which greatly reduce the chance of introducing space- and time-leaks into reactive, time-varying systems.<br />
<br />
Yampa was originally developed by the [http://haskell.cs.yale.edu/ Yale Haskell Group] based on the original idea of [http://www.conal.net|Conal Elliott's] [[Fran]].<br />
<br />
'''[http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Yampa Download Yampa]'''<br />
<br />
== Introduction ==<br />
<br />
* [http://www.cs.nott.ac.uk/~nhn/FoPAD2007/Talks/nhn-FoPAD2007.pdf Henrik Nilsson - A Brief Introduction to Functional Reactive Programming and Yampa]<br />
* [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/ Henrik Nilsson - ITU-FRP2010]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture01.pdf ITU-FRP2010 01]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture02.pdf ITU-FRP2010 02]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture03.pdf ITU-FRP2010 03]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture04.pdf ITU-FRP2010 04]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture05.pdf ITU-FRP2010 05]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture06.pdf ITU-FRP2010 06]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture07.pdf ITU-FRP2010 07]<br />
* [http://plucky.cs.yale.edu/CS429F04/LectureSlides/YampaForCs429.ppt Paul Hudak - Yampa, Arrows, and Robots]<br />
* Yampa tutorials by [http://lambdor.net Gerold Meisinger]<br />
** [http://lambdor.net/?p=34 Running primitive signal functions in Yampa]<br />
** [http://lambdor.net/?p=59 Yampa/SDL program stub]<br />
** [http://lambdor.net/?p=44 Learning Yampa and Functional Reactive Programming]<br />
** [http://lambdor.net/?p=209 Diagrams of Yampa switches]<br />
** [http://lambdor.net/?p=117 Dataflow diagram of Yampa reactimate]<br />
** [http://lambdor.net/?p=113 Activity diagram of Yampa reactimate]<br />
* References: [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk/src/foo.ps ps], [http://lambdor.net/wp-content/uploads/2010/12/AFRP-Reference.pdf pdf]<br />
* Videos<br />
** [http://vimeo.com/6632457 Safe Functional Reactive Programming through Dependent Types]<br />
** [http://vimeo.com/6652662 Causal Commutative Arrows and Their Optimization]<br />
** [http://www.youtube.com/watch?v=xtmo6Bmfahc Euterpea: From signals to symphonies]<br />
<br />
== Primitive signal functions ==<br />
<br />
[[Image:Yampa signal functions.png|768px]]<br />
<br />
(download original [[:Image:Yampa signal functions.svg]])<br />
<br />
== Switches ==<br />
<br />
* [[Yampa/switch|switch]]<br />
* [[Yampa/rSwitch|rSwitch]]<br />
* [[Yampa/rSwitch|kSwitch]]<br />
* [[Yampa/pSwitchB|pSwitchB]]<br />
* [[Yampa/pSwitch|pSwitch]]<br />
* [[Yampa/rpSwitchB|rpSwitchB]]<br />
* [[Yampa/rpSwitch|rpSwitch]]<br />
<br />
Each switch comes in two different flavors:<br />
# ''immediate'': switch to the new behaviour immediately and also calculate the return value based on the new behaviour.<br />
# ''delayed'': return the value based on the old behaviour, but use the new behaviour afterwards. To use delayed switch prefix the switching functions with the letter 'd', f.e. 'drpSwitchB'.<br />
<br />
== Reactimation ==<br />
<br />
* [[Yampa/reactimate|reactimate]]<br />
* [[Yampa/game_engine|Game engine]]<br />
<br />
== External Links ==<br />
<br />
* [http://mailman.cs.yale.edu/mailman/listinfo/yampa-users Yampa-Users mailing list] - Yampa-related comments, questions, discussions, and announcements. You can also send bug reports to [mailto:yampa-bugs@cs.yale.edu yampa-bugs@cs.yale.edu].<br />
* [http://www.cs.nott.ac.uk/~ggg/ George Giorgidze] created YampaSynth, a modular music synthesizer written in Haskell and using Yampa.<br />
* [http://www.cs.yale.edu/homes/hl293] - Hai (Paul) Liu papers and slides<br />
* [http://lambdor.net Blog about Yampa] - introduction tutorials and diagrams<br />
* [http://blog.edwardamsden.com/2011/03/demonstrating-time-leak-in-arrowized.html Demonstrating a Time Leak in Arrowized FRP]<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2011-April/000409.html answer]<br />
<br />
== Known users ==<br />
<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/YampaSynth YampaSynth] - is a software synthesizer implemented in Haskell using Yampa. It contains a framework of sound generating and sound shaping modules (e.g. oscillator, amplifier, mixer, envelope generator, filter, etc.) and example applications.<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/SpaceInvaders Space Invaders]; a video game, demonstrating the usage of Yampa<br />
* [http://haskell.cs.yale.edu/?page_id=376 Nettle] - Programming Network Routers<br />
* [http://haskell.cs.yale.edu/?page_id=103 Euterpea] - computer music development (also uses [[CCA]])<br />
<br />
== Known forks ==<br />
<br />
* [https://github.com/eamsden/Animas Animas]<br />
** code cleanup<br />
** [http://blog.edwardamsden.com/ Facts and Theories] blog by Edward Amsden<br />
* [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk FRVR]<br />
** restructuring of modules<br />
** [http://imve.informatik.uni-hamburg.de/projects/DIVE DIVE project]<br />
** [http://imve.informatik.uni-hamburg.de/files/71-Blom-Diss-online.pdf Kristopher J. Blom - Dynamic, Interactive Virtual Environments] section 8.3<br />
<br />
[[Category:FRP]]<br />
[[Category:Arrow]]</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa&diff=40781Yampa2011-07-02T09:54:40Z<p>GeroldMeisinger: /* Introduction */</p>
<hr />
<div>Yampa is a domain-specific embedded language for the programming of hybrid (discrete and continious) systems using the concepts of [[Functional Reactive Programming]] (FRP). Yampa is structured using [[Arrow]]s, which greatly reduce the chance of introducing space- and time-leaks into reactive, time-varying systems.<br />
<br />
Yampa was originally developed by the [http://haskell.cs.yale.edu/ Yale Haskell Group].<br />
<br />
'''[http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Yampa Download Yampa]'''<br />
<br />
== Introduction ==<br />
<br />
* [http://www.cs.nott.ac.uk/~nhn/FoPAD2007/Talks/nhn-FoPAD2007.pdf Henrik Nilsson - A Brief Introduction to Functional Reactive Programming and Yampa]<br />
* [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/ Henrik Nilsson - ITU-FRP2010]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture01.pdf ITU-FRP2010 01]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture02.pdf ITU-FRP2010 02]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture03.pdf ITU-FRP2010 03]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture04.pdf ITU-FRP2010 04]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture05.pdf ITU-FRP2010 05]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture06.pdf ITU-FRP2010 06]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture07.pdf ITU-FRP2010 07]<br />
* [http://plucky.cs.yale.edu/CS429F04/LectureSlides/YampaForCs429.ppt Paul Hudak - Yampa, Arrows, and Robots]<br />
* Yampa tutorials by [http://lambdor.net Gerold Meisinger]<br />
** [http://lambdor.net/?p=34 Running primitive signal functions in Yampa]<br />
** [http://lambdor.net/?p=59 Yampa/SDL program stub]<br />
** [http://lambdor.net/?p=44 Learning Yampa and Functional Reactive Programming]<br />
** [http://lambdor.net/?p=209 Diagrams of Yampa switches]<br />
** [http://lambdor.net/?p=117 Dataflow diagram of Yampa reactimate]<br />
** [http://lambdor.net/?p=113 Activity diagram of Yampa reactimate]<br />
* References: [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk/src/foo.ps ps], [http://lambdor.net/wp-content/uploads/2010/12/AFRP-Reference.pdf pdf]<br />
* Videos<br />
** [http://vimeo.com/6632457 Safe Functional Reactive Programming through Dependent Types]<br />
** [http://vimeo.com/6652662 Causal Commutative Arrows and Their Optimization]<br />
** [http://www.youtube.com/watch?v=xtmo6Bmfahc Euterpea: From signals to symphonies]<br />
<br />
== Primitive signal functions ==<br />
<br />
[[Image:Yampa signal functions.png|768px]]<br />
<br />
(download original [[:Image:Yampa signal functions.svg]])<br />
<br />
== Switches ==<br />
<br />
* [[Yampa/switch|switch]]<br />
* [[Yampa/rSwitch|rSwitch]]<br />
* [[Yampa/rSwitch|kSwitch]]<br />
* [[Yampa/pSwitchB|pSwitchB]]<br />
* [[Yampa/pSwitch|pSwitch]]<br />
* [[Yampa/rpSwitchB|rpSwitchB]]<br />
* [[Yampa/rpSwitch|rpSwitch]]<br />
<br />
Each switch comes in two different flavors:<br />
# ''immediate'': switch to the new behaviour immediately and also calculate the return value based on the new behaviour.<br />
# ''delayed'': return the value based on the old behaviour, but use the new behaviour afterwards. To use delayed switch prefix the switching functions with the letter 'd', f.e. 'drpSwitchB'.<br />
<br />
== Reactimation ==<br />
<br />
* [[Yampa/reactimate|reactimate]]<br />
* [[Yampa/game_engine|Game engine]]<br />
<br />
== External Links ==<br />
<br />
* [http://mailman.cs.yale.edu/mailman/listinfo/yampa-users Yampa-Users mailing list] - Yampa-related comments, questions, discussions, and announcements. You can also send bug reports to [mailto:yampa-bugs@cs.yale.edu yampa-bugs@cs.yale.edu].<br />
* [http://www.cs.nott.ac.uk/~ggg/ George Giorgidze] created YampaSynth, a modular music synthesizer written in Haskell and using Yampa.<br />
* [http://www.cs.yale.edu/homes/hl293] - Hai (Paul) Liu papers and slides<br />
* [http://lambdor.net Blog about Yampa] - introduction tutorials and diagrams<br />
* [http://blog.edwardamsden.com/2011/03/demonstrating-time-leak-in-arrowized.html Demonstrating a Time Leak in Arrowized FRP]<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2011-April/000409.html answer]<br />
<br />
== Known users ==<br />
<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/YampaSynth YampaSynth] - is a software synthesizer implemented in Haskell using Yampa. It contains a framework of sound generating and sound shaping modules (e.g. oscillator, amplifier, mixer, envelope generator, filter, etc.) and example applications.<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/SpaceInvaders Space Invaders]; a video game, demonstrating the usage of Yampa<br />
* [http://haskell.cs.yale.edu/?page_id=376 Nettle] - Programming Network Routers<br />
* [http://haskell.cs.yale.edu/?page_id=103 Euterpea] - computer music development (also uses [[CCA]])<br />
<br />
== Known forks ==<br />
<br />
* [https://github.com/eamsden/Animas Animas]<br />
** code cleanup<br />
** [http://blog.edwardamsden.com/ Facts and Theories] blog by Edward Amsden<br />
* [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk FRVR]<br />
** restructuring of modules<br />
** [http://imve.informatik.uni-hamburg.de/projects/DIVE DIVE project]<br />
** [http://imve.informatik.uni-hamburg.de/files/71-Blom-Diss-online.pdf Kristopher J. Blom - Dynamic, Interactive Virtual Environments] section 8.3<br />
<br />
[[Category:FRP]]<br />
[[Category:Arrow]]</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa/game_engine&diff=40780Yampa/game engine2011-07-02T09:51:42Z<p>GeroldMeisinger: </p>
<hr />
<div>[[Image:Yampa game engine architecture.png|768px]]<br />
(download original [[:Image:Yampa game engine architecture.svg|Yampa game engine architecture.svg]])<br />
<br />
[[Image:Yampa reactimate dataflow diagram.png|768px]]<br />
(download original [[:Image:Yampa reactimate dataflow diagram.svg|Yampa reactimate dataflow diagram.svg]])<br />
<br />
[[Image:Yampa reactimate activity diagram.png|768px]]<br />
(download original [[:Image:Yampa reactimate activity diagram.svg|Yampa reactimate activity diagram.svg]])<br />
<br />
These diagrams show a complete game engine architecture using [[Arrows|arrowized]] functional reactive programming. The concept is heavily based on the Space Invaders example of the Yale Haskell Group, using the Yampa [[Yampa/reactimate|reactimate]] and [[Yampa/pSwitch|dpSwitch]] function.<br />
<br />
A game can be thought of as an input-process-output loop (a "stateful process") which produces a new game state every cycle. The main idea is to have a collection of game objects (isolated parallel signal functions), each producing a new observable state (f.e. position, animation frame), which together make up the whole game state. The game state is put out every cycle (rendering, sound etc.), but also fed back to the new processing step. The function 'logic' does observing of the global game state (f.e. collision detection) and routes the input and messages to the game objects correspondignly. The input comes from non-deterministic IO sources (time, gamepad, harddisk etc.).<br />
<br />
Keep in mind that there is an '''additional 'init' step''' (see [[Yampa/reactimate|reactimate]]) prior to the first input step and which procudes the first game state.<br />
<br />
What may appear strange compared to imperative game engines is the fact the whole game state and object list is reproduced every cycle. Additionally, if the game object list changes, the whole core is "switched-into" a new core.</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa/reactimate&diff=40779Yampa/reactimate2011-07-02T09:51:20Z<p>GeroldMeisinger: </p>
<hr />
<div><source lang="Haskell"><br />
reactimate :: IO a -- init<br />
-> (Bool -> IO (DTime, Maybe a)) -- input/sense<br />
-> (Bool -> b -> IO Bool) -- output/actuate<br />
-> SF a b -- process/signal function<br />
-> IO ()<br />
</source><br />
<br />
'reactimate' basically is an input-process-output loop. Keep in mind that the signal function may take pretty complex forms like a [[Yampa/Switches|parallel switch]] embedded in a loop.<br />
<br />
(The 'Bool' parameter of 'input' and 'output' are unused if you look up the definition of reactimate so just ignore them.)</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa/game_engine&diff=40778Yampa/game engine2011-07-02T09:36:03Z<p>GeroldMeisinger: </p>
<hr />
<div>[[Image:Yampa game engine architecture.png|768px]]<br />
(download original [[:Image:Yampa game engine architecture.svg|Yampa game engine architecture.svg]])<br />
<br />
[[Image:Yampa reactimate dataflow diagram.png|768px]]<br />
(download original [[:Image:Yampa reactimate dataflow diagram.svg|Yampa reactimate dataflow diagram.svg]])<br />
<br />
This diagram shows a complete game engine architecture using [[Arrows|arrowized]] functional reactive programming. The concept is heavily based on the Space Invaders example of the Yale Haskell Group, using the Yampa [[Yampa/reactimate|reactimate]] and [[Yampa/pSwitch|dpSwitch]] function.<br />
<br />
A game can be thought of as an input-process-output loop (a "stateful process") which produces a new game state every cycle. The main idea is to have a collection of game objects (isolated parallel signal functions), each producing a new observable state (f.e. position, animation frame), which together make up the whole game state. The game state is put out every cycle (rendering, sound etc.), but also fed back to the new processing step. The function 'logic' does observing of the global game state (f.e. collision detection) and routes the input and messages to the game objects correspondignly. The input comes from non-deterministic IO sources (time, gamepad, harddisk etc.).<br />
<br />
Keep in mind that there is an '''additional 'init' step''' (see [[Yampa/reactimate|reactimate]]) prior to the first input step and which procudes the first game state.<br />
<br />
What may appear strange compared to imperative game engines is the fact the whole game state and object list is reproduced every cycle. Additionally, if the game object list changes, the whole core is "switched-into" a new core.</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa/reactimate&diff=40777Yampa/reactimate2011-07-02T09:34:01Z<p>GeroldMeisinger: New page: 768px (download original Yampa reactimate activity diagram.svg)</p>
<hr />
<div>[[Image:Yampa reactimate activity diagram.png|768px]]<br />
(download original [[:Image:Yampa reactimate activity diagram.svg|Yampa reactimate activity diagram.svg]])</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa&diff=40776Yampa2011-07-02T09:32:27Z<p>GeroldMeisinger: /* Switches */</p>
<hr />
<div>Yampa is a domain-specific embedded language for the programming of hybrid (discrete and continious) systems using the concepts of [[Functional Reactive Programming]] (FRP). Yampa is structured using [[Arrow]]s, which greatly reduce the chance of introducing space- and time-leaks into reactive, time-varying systems.<br />
<br />
Yampa was originally developed by the [http://haskell.cs.yale.edu/ Yale Haskell Group].<br />
<br />
'''[http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Yampa Download Yampa]'''<br />
<br />
== Introduction ==<br />
<br />
* [http://www.cs.nott.ac.uk/~nhn/FoPAD2007/Talks/nhn-FoPAD2007.pdf Henrik Nilsson - A Brief Introduction to Functional Reactive Programming and Yampa]<br />
* [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/ Henrik Nilsson - ITU-FRP2010]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture01.pdf ITU-FRP2010 01]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture02.pdf ITU-FRP2010 02]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture03.pdf ITU-FRP2010 03]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture04.pdf ITU-FRP2010 04]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture05.pdf ITU-FRP2010 05]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture06.pdf ITU-FRP2010 06]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture07.pdf ITU-FRP2010 07]<br />
* [http://plucky.cs.yale.edu/CS429F04/LectureSlides/YampaForCs429.ppt Paul Hudak - Yampa, Arrows, and Robots]<br />
* Yampa tutorials by [http://lambdor.net Gerold Meisinger]<br />
** [http://lambdor.net/?p=34 Running primitive signal functions in Yampa]<br />
** [http://lambdor.net/?p=59 Yampa/SDL program stub]<br />
** [http://lambdor.net/?p=44 Learning Yampa and Functional Reactive Programming]<br />
** [http://lambdor.net/?p=209 Diagrams of Yampa switches]<br />
** [http://lambdor.net/?p=117 Dataflow diagram of Yampa reactimate]<br />
** [http://lambdor.net/?p=113 Activity diagram of Yampa reactimate]<br />
* References: [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk/src/foo.ps ps], [http://lambdor.net/wp-content/uploads/2010/12/AFRP-Reference.pdf pdf]<br />
* Videos<br />
** [http://vimeo.com/6632457 Safe Functional Reactive Programming through Dependent Types]<br />
** [http://vimeo.com/6652662 Causal Commutative Arrows and Their Optimization]<br />
<br />
== Primitive signal functions ==<br />
<br />
[[Image:Yampa signal functions.png|768px]]<br />
<br />
(download original [[:Image:Yampa signal functions.svg]])<br />
<br />
== Switches ==<br />
<br />
* [[Yampa/switch|switch]]<br />
* [[Yampa/rSwitch|rSwitch]]<br />
* [[Yampa/rSwitch|kSwitch]]<br />
* [[Yampa/pSwitchB|pSwitchB]]<br />
* [[Yampa/pSwitch|pSwitch]]<br />
* [[Yampa/rpSwitchB|rpSwitchB]]<br />
* [[Yampa/rpSwitch|rpSwitch]]<br />
<br />
Each switch comes in two different flavors:<br />
# ''immediate'': switch to the new behaviour immediately and also calculate the return value based on the new behaviour.<br />
# ''delayed'': return the value based on the old behaviour, but use the new behaviour afterwards. To use delayed switch prefix the switching functions with the letter 'd', f.e. 'drpSwitchB'.<br />
<br />
== Reactimation ==<br />
<br />
* [[Yampa/reactimate|reactimate]]<br />
* [[Yampa/game_engine|Game engine]]<br />
<br />
== External Links ==<br />
<br />
* [http://mailman.cs.yale.edu/mailman/listinfo/yampa-users Yampa-Users mailing list] - Yampa-related comments, questions, discussions, and announcements. You can also send bug reports to [mailto:yampa-bugs@cs.yale.edu yampa-bugs@cs.yale.edu].<br />
* [http://www.cs.nott.ac.uk/~ggg/ George Giorgidze] created YampaSynth, a modular music synthesizer written in Haskell and using Yampa.<br />
* [http://www.cs.yale.edu/homes/hl293] - Hai (Paul) Liu papers and slides<br />
* [http://lambdor.net Blog about Yampa] - introduction tutorials and diagrams<br />
* [http://blog.edwardamsden.com/2011/03/demonstrating-time-leak-in-arrowized.html Demonstrating a Time Leak in Arrowized FRP]<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2011-April/000409.html answer]<br />
<br />
== Known users ==<br />
<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/YampaSynth YampaSynth] - is a software synthesizer implemented in Haskell using Yampa. It contains a framework of sound generating and sound shaping modules (e.g. oscillator, amplifier, mixer, envelope generator, filter, etc.) and example applications.<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/SpaceInvaders Space Invaders]; a video game, demonstrating the usage of Yampa<br />
* [http://haskell.cs.yale.edu/?page_id=376 Nettle] - Programming Network Routers<br />
* [http://haskell.cs.yale.edu/?page_id=103 Euterpea] - computer music development (also uses [[CCA]])<br />
<br />
== Known forks ==<br />
<br />
* [https://github.com/eamsden/Animas Animas]<br />
** code cleanup<br />
** [http://blog.edwardamsden.com/ Facts and Theories] blog by Edward Amsden<br />
* [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk FRVR]<br />
** restructuring of modules<br />
** [http://imve.informatik.uni-hamburg.de/projects/DIVE DIVE project]<br />
** [http://imve.informatik.uni-hamburg.de/files/71-Blom-Diss-online.pdf Kristopher J. Blom - Dynamic, Interactive Virtual Environments] section 8.3<br />
<br />
[[Category:FRP]]<br />
[[Category:Arrow]]</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa/game_engine&diff=40775Yampa/game engine2011-07-02T09:23:15Z<p>GeroldMeisinger: </p>
<hr />
<div>[[Image:Yampa game engine architecture.png|768px]]<br />
(download original [[:Image:Yampa game engine architecture.svg|Yampa game engine architecture.svg]])<br />
<br />
This diagram shows a complete game engine architecture using [[Arrows|arrowized]] functional reactive programming. The concept is heavily based on the Space Invaders example of the Yale Haskell Group, using the Yampa [[Yampa/reactimate|reactimate]] and [[Yampa/pSwitch|dpSwitch]] function.<br />
<br />
A game can be thought of as an input-process-output loop (a "stateful process") which produces a new game state every cycle. The main idea is to have a collection of game objects (isolated parallel signal functions), each producing a new observable state (f.e. position, animation frame), which together make up the whole game state. The game state is put out every cycle (rendering, sound etc.), but also fed back to the new processing step. The function 'logic' does observing of the global game state (f.e. collision detection) and routes the input and messages to the game objects correspondignly. The input comes from non-deterministic IO sources (time, gamepad, harddisk etc.).<br />
<br />
Keep in mind that there is an '''additional 'init' step''' (see [[Yampa/reactimate|reactimate]]) prior to the first input step and which procudes the first game state.<br />
<br />
What may appear strange compared to imperative game engines is the fact the whole game state and object list is reproduced every cycle. Additionally, if the game object list changes, the whole core is "switched-into" a new core.</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa/game_engine&diff=40774Yampa/game engine2011-07-02T09:22:13Z<p>GeroldMeisinger: </p>
<hr />
<div>[[Image:Yampa game engine architecture.png|768px]]<br />
(download original [[:Image:Yampa game engine architecture.svg|Yampa game engine architecture.svg]])<br />
<br />
This diagram shows a complete game engine architecture using [[Arrows|arrowized]] functional reactive programming. The concept is heavily based on the Space Invaders example of the Yale Haskell Group, using the Yampa [[Yampa/reactimate|reactimate]] function.<br />
<br />
A game can be thought of as an input-process-output loop (a "stateful process") which produces a new game state every cycle. The main idea is to have a collection of game objects (isolated parallel signal functions), each producing a new observable state (f.e. position, animation frame), which together make up the whole game state. The game state is put out every cycle (rendering, sound etc.), but also fed back to the new processing step. The function 'logic' does observing of the global game state (f.e. collision detection) and routes the input and messages to the game objects correspondignly. The input comes from non-deterministic IO sources (time, gamepad, harddisk etc.).<br />
<br />
Keep in mind that there is an '''additional 'init' step''' (see [[Yampa/reactimate|reactimate]]) prior to the first input step and which procudes the first game state.<br />
<br />
What may appear strange compared to imperative game engines is the fact the whole game state and object list is reproduced every cycle. Additionally, if the game object list changes, the whole core is "switched-into" a new core.</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa/game_engine&diff=40773Yampa/game engine2011-07-02T09:21:20Z<p>GeroldMeisinger: </p>
<hr />
<div>[[Image:Yampa game engine architecture.png|768px]]<br />
(download original [[:Image:Yampa game engine architecture.svg|Yampa game engine architecture.svg]])<br />
<br />
This diagram shows a complete game engine architecture using [[Arrows|arrowized]] functional reactive programming. The concept is heavily based on the Space Invaders example of the Yale Haskell Group, using the Yampa [[Yampa/reactimate|reactimate]] function.<br />
<br />
A game can be thought of as an input-process-output loop (a "stateful process") which produces a new game state every cycle. The main idea is to have a collection of game objects (isolated parallel signal functions), each producing a new observable state (f.e. position, animation frame), which together make up the whole game state. The game state is put out every cycle (rendering, sound etc.), but also fed back to the new processing step. The function 'logic' does observing of the global game state and routes the input and messages to the game objects correspondignly. The input comes from non-deterministic IO sources (time, gamepad, harddisk etc.).<br />
<br />
Keep in mind that there is an '''additional 'init' step''' (see [[Yampa/reactimate|reactimate]]) prior to the first input step and which procudes the first game state.<br />
<br />
What may appear strange compared to imperative game engines is the fact the whole game state and object list is reproduced every cycle. Additionally, if the game object list changes, the whole core is "switched-into" a new core.</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa/game_engine&diff=40772Yampa/game engine2011-07-02T09:20:34Z<p>GeroldMeisinger: New page: 768px (download original Yampa game engine architecture.svg) This diagram shows a complete ga...</p>
<hr />
<div>[[Image:Yampa game engine architecture.png|768px]]<br />
(download original [[:Image:Yampa game engine architecture.svg|Yampa game engine architecture.svg]])<br />
<br />
This diagram shows a complete game engine architecture using [[Arrows|arrowized]] functional reactive programming. The concept is heavily based on the Space Invaders example of the Yale Haskell Group.<br />
<br />
A game can be thought of as an input-process-output loop (a "stateful process") which produces a new game state every cycle. The main idea is to have a collection of game objects (isolated parallel signal functions), each producing a new observable state (f.e. position, animation frame), which together make up the whole game state. The game state is put out every cycle (rendering, sound etc.), but also fed back to the new processing step. The function 'logic' does observing of the global game state and routes the input and messages to the game objects correspondignly. The input comes from non-deterministic IO sources (time, gamepad, harddisk etc.).<br />
<br />
Keep in mind that there is an '''additional 'init' step''' (see [[Yampa/reactimate|reactimate]]) prior to the first input step and which procudes the first game state.<br />
<br />
What may appear strange compared to imperative game engines is the fact the whole game state and object list is reproduced every cycle. Additionally, if the game object list changes, the whole core is "switched-into" a new core.</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa&diff=40771Yampa2011-07-02T08:52:05Z<p>GeroldMeisinger: /* Switches */</p>
<hr />
<div>Yampa is a domain-specific embedded language for the programming of hybrid (discrete and continious) systems using the concepts of [[Functional Reactive Programming]] (FRP). Yampa is structured using [[Arrow]]s, which greatly reduce the chance of introducing space- and time-leaks into reactive, time-varying systems.<br />
<br />
Yampa was originally developed by the [http://haskell.cs.yale.edu/ Yale Haskell Group].<br />
<br />
'''[http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Yampa Download Yampa]'''<br />
<br />
== Introduction ==<br />
<br />
* [http://www.cs.nott.ac.uk/~nhn/FoPAD2007/Talks/nhn-FoPAD2007.pdf Henrik Nilsson - A Brief Introduction to Functional Reactive Programming and Yampa]<br />
* [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/ Henrik Nilsson - ITU-FRP2010]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture01.pdf ITU-FRP2010 01]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture02.pdf ITU-FRP2010 02]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture03.pdf ITU-FRP2010 03]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture04.pdf ITU-FRP2010 04]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture05.pdf ITU-FRP2010 05]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture06.pdf ITU-FRP2010 06]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture07.pdf ITU-FRP2010 07]<br />
* [http://plucky.cs.yale.edu/CS429F04/LectureSlides/YampaForCs429.ppt Paul Hudak - Yampa, Arrows, and Robots]<br />
* Yampa tutorials by [http://lambdor.net Gerold Meisinger]<br />
** [http://lambdor.net/?p=34 Running primitive signal functions in Yampa]<br />
** [http://lambdor.net/?p=59 Yampa/SDL program stub]<br />
** [http://lambdor.net/?p=44 Learning Yampa and Functional Reactive Programming]<br />
** [http://lambdor.net/?p=209 Diagrams of Yampa switches]<br />
** [http://lambdor.net/?p=117 Dataflow diagram of Yampa reactimate]<br />
** [http://lambdor.net/?p=113 Activity diagram of Yampa reactimate]<br />
* References: [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk/src/foo.ps ps], [http://lambdor.net/wp-content/uploads/2010/12/AFRP-Reference.pdf pdf]<br />
* Videos<br />
** [http://vimeo.com/6632457 Safe Functional Reactive Programming through Dependent Types]<br />
** [http://vimeo.com/6652662 Causal Commutative Arrows and Their Optimization]<br />
<br />
== Primitive signal functions ==<br />
<br />
[[Image:Yampa signal functions.png|768px]]<br />
<br />
(download original [[:Image:Yampa signal functions.svg]])<br />
<br />
== Switches ==<br />
<br />
* [[Yampa/switch|switch]]<br />
* [[Yampa/rSwitch|rSwitch]]<br />
* [[Yampa/rSwitch|kSwitch]]<br />
* [[Yampa/pSwitchB|pSwitchB]]<br />
* [[Yampa/pSwitch|pSwitch]]<br />
* [[Yampa/rpSwitchB|rpSwitchB]]<br />
* [[Yampa/rpSwitch|rpSwitch]]<br />
<br />
== Reactimation ==<br />
<br />
* [[Yampa/reactimate|reactimate]]<br />
* [[Yampa/game_engine|Game engine]]<br />
<br />
== External Links ==<br />
<br />
* [http://mailman.cs.yale.edu/mailman/listinfo/yampa-users Yampa-Users mailing list] - Yampa-related comments, questions, discussions, and announcements. You can also send bug reports to [mailto:yampa-bugs@cs.yale.edu yampa-bugs@cs.yale.edu].<br />
* [http://www.cs.nott.ac.uk/~ggg/ George Giorgidze] created YampaSynth, a modular music synthesizer written in Haskell and using Yampa.<br />
* [http://www.cs.yale.edu/homes/hl293] - Hai (Paul) Liu papers and slides<br />
* [http://lambdor.net Blog about Yampa] - introduction tutorials and diagrams<br />
* [http://blog.edwardamsden.com/2011/03/demonstrating-time-leak-in-arrowized.html Demonstrating a Time Leak in Arrowized FRP]<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2011-April/000409.html answer]<br />
<br />
== Known users ==<br />
<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/YampaSynth YampaSynth] - is a software synthesizer implemented in Haskell using Yampa. It contains a framework of sound generating and sound shaping modules (e.g. oscillator, amplifier, mixer, envelope generator, filter, etc.) and example applications.<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/SpaceInvaders Space Invaders]; a video game, demonstrating the usage of Yampa<br />
* [http://haskell.cs.yale.edu/?page_id=376 Nettle] - Programming Network Routers<br />
* [http://haskell.cs.yale.edu/?page_id=103 Euterpea] - computer music development (also uses [[CCA]])<br />
<br />
== Known forks ==<br />
<br />
* [https://github.com/eamsden/Animas Animas]<br />
** code cleanup<br />
** [http://blog.edwardamsden.com/ Facts and Theories] blog by Edward Amsden<br />
* [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk FRVR]<br />
** restructuring of modules<br />
** [http://imve.informatik.uni-hamburg.de/projects/DIVE DIVE project]<br />
** [http://imve.informatik.uni-hamburg.de/files/71-Blom-Diss-online.pdf Kristopher J. Blom - Dynamic, Interactive Virtual Environments] section 8.3<br />
<br />
[[Category:FRP]]<br />
[[Category:Arrow]]</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa/switch&diff=40770Yampa/switch2011-07-02T08:43:16Z<p>GeroldMeisinger: </p>
<hr />
<div>[[Image:Yampa switch.png|768px]]<br />
(download original [[:Image:Yampa switch.svg|Yampa switch.svg]])<br />
<br />
<source lang="haskell"><br />
switch :: SF in (out, Event t)<br />
-> (t -> SF in out)<br />
-> SF in out<br />
</source><br />
<br />
A switch in Yampa provides change of behavior of signal functions (SF) during runtime. The function 'switch' is the simplest form which can only be switched once. The signature is read like this: "Be a SF which is always fed a signal of type 'in' and returns a signal of type 'out'. Start with an initial SF of the same type but which may also return a transition event of type 'Event t'. In case of an Event, Yampa feeds the variable 't' to the continuation function 'k' which produces the new SF based on the variable 't', again with the same input and output types."<br />
<br />
{{Yampa Switches}}</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa/switch&diff=40769Yampa/switch2011-07-02T08:42:55Z<p>GeroldMeisinger: </p>
<hr />
<div>[[Image:Yampa switch.png|768px]]<br />
(download original [[:Image:Yampa switch.svg|Yampa switch.svg]])<br />
<br />
<source lang="haskell"><br />
switch :: SF in (out, Event t)<br />
-> (t -> SF in out)<br />
-> SF in out<br />
</source><br />
<br />
A switch in Yampa provides change of behavior of signal functions (SF) during runtime. The <pre>switch</pre> function is the simplest form which can only be switched once. The signature is read like this: "Be a SF which is always fed a signal of type 'in' and returns a signal of type 'out'. Start with an initial SF of the same type but which may also return a transition event of type 'Event t'. In case of an Event, Yampa feeds the variable 't' to the continuation function 'k' which produces the new SF based on the variable 't', again with the same input and output types."<br />
<br />
{{Yampa Switches}}</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa/kSwitch&diff=40768Yampa/kSwitch2011-07-02T08:13:41Z<p>GeroldMeisinger: New page: 768px <source lang="haskell"> kSwitch :: SF in out -> SF (in, out) (Event t) -> (SF in out -> t -> SF in out) -> SF in out </source> (...</p>
<hr />
<div>[[Image:Yampa kSwitch.png|768px]]<br />
<br />
<source lang="haskell"><br />
kSwitch :: SF in out<br />
-> SF (in, out) (Event t)<br />
-> (SF in out -> t -> SF in out)<br />
-> SF in out<br />
</source><br />
<br />
(download original [[:Image:Yampa kSwitch.svg|Yampa kSwitch.svg]])<br />
<br />
{{Yampa Switches}}</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Template:Yampa_Switches&diff=40767Template:Yampa Switches2011-07-02T08:12:05Z<p>GeroldMeisinger: </p>
<hr />
<div>[[Yampa|Yampa switches]]<br />
* [[Yampa/switch|switch]]<br />
* [[Yampa/rSwitch|rSwitch]]<br />
* [[Yampa/kSwitch|kSwitch]]<br />
* [[Yampa/pSwitchB|pSwitchB]]<br />
* [[Yampa/pSwitch|pSwitch]]<br />
* [[Yampa/rpSwitchB|rpSwitchB]]<br />
* [[Yampa/rpSwitch|rpSwitch]]</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa&diff=40766Yampa2011-07-02T08:10:47Z<p>GeroldMeisinger: /* External Links */</p>
<hr />
<div>Yampa is a domain-specific embedded language for the programming of hybrid (discrete and continious) systems using the concepts of [[Functional Reactive Programming]] (FRP). Yampa is structured using [[Arrow]]s, which greatly reduce the chance of introducing space- and time-leaks into reactive, time-varying systems.<br />
<br />
Yampa was originally developed by the [http://haskell.cs.yale.edu/ Yale Haskell Group].<br />
<br />
'''[http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Yampa Download Yampa]'''<br />
<br />
== Introduction ==<br />
<br />
* [http://www.cs.nott.ac.uk/~nhn/FoPAD2007/Talks/nhn-FoPAD2007.pdf Henrik Nilsson - A Brief Introduction to Functional Reactive Programming and Yampa]<br />
* [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/ Henrik Nilsson - ITU-FRP2010]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture01.pdf ITU-FRP2010 01]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture02.pdf ITU-FRP2010 02]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture03.pdf ITU-FRP2010 03]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture04.pdf ITU-FRP2010 04]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture05.pdf ITU-FRP2010 05]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture06.pdf ITU-FRP2010 06]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture07.pdf ITU-FRP2010 07]<br />
* [http://plucky.cs.yale.edu/CS429F04/LectureSlides/YampaForCs429.ppt Paul Hudak - Yampa, Arrows, and Robots]<br />
* Yampa tutorials by [http://lambdor.net Gerold Meisinger]<br />
** [http://lambdor.net/?p=34 Running primitive signal functions in Yampa]<br />
** [http://lambdor.net/?p=59 Yampa/SDL program stub]<br />
** [http://lambdor.net/?p=44 Learning Yampa and Functional Reactive Programming]<br />
** [http://lambdor.net/?p=209 Diagrams of Yampa switches]<br />
** [http://lambdor.net/?p=117 Dataflow diagram of Yampa reactimate]<br />
** [http://lambdor.net/?p=113 Activity diagram of Yampa reactimate]<br />
* References: [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk/src/foo.ps ps], [http://lambdor.net/wp-content/uploads/2010/12/AFRP-Reference.pdf pdf]<br />
* Videos<br />
** [http://vimeo.com/6632457 Safe Functional Reactive Programming through Dependent Types]<br />
** [http://vimeo.com/6652662 Causal Commutative Arrows and Their Optimization]<br />
<br />
== Primitive signal functions ==<br />
<br />
[[Image:Yampa signal functions.png|768px]]<br />
<br />
(download original [[:Image:Yampa signal functions.svg]])<br />
<br />
== Switches ==<br />
<br />
* [[Yampa/switch|switch]]<br />
* [[Yampa/rSwitch|rSwitch]]<br />
* [[Yampa/rSwitch|kSwitch]]<br />
* [[Yampa/pSwitchB|pSwitchB]]<br />
* [[Yampa/pSwitch|pSwitch]]<br />
* [[Yampa/rpSwitchB|rpSwitchB]]<br />
* [[Yampa/rpSwitch|rpSwitch]]<br />
<br />
== External Links ==<br />
<br />
* [http://mailman.cs.yale.edu/mailman/listinfo/yampa-users Yampa-Users mailing list] - Yampa-related comments, questions, discussions, and announcements. You can also send bug reports to [mailto:yampa-bugs@cs.yale.edu yampa-bugs@cs.yale.edu].<br />
* [http://www.cs.nott.ac.uk/~ggg/ George Giorgidze] created YampaSynth, a modular music synthesizer written in Haskell and using Yampa.<br />
* [http://www.cs.yale.edu/homes/hl293] - Hai (Paul) Liu papers and slides<br />
* [http://lambdor.net Blog about Yampa] - introduction tutorials and diagrams<br />
* [http://blog.edwardamsden.com/2011/03/demonstrating-time-leak-in-arrowized.html Demonstrating a Time Leak in Arrowized FRP]<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2011-April/000409.html answer]<br />
<br />
== Known users ==<br />
<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/YampaSynth YampaSynth] - is a software synthesizer implemented in Haskell using Yampa. It contains a framework of sound generating and sound shaping modules (e.g. oscillator, amplifier, mixer, envelope generator, filter, etc.) and example applications.<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/SpaceInvaders Space Invaders]; a video game, demonstrating the usage of Yampa<br />
* [http://haskell.cs.yale.edu/?page_id=376 Nettle] - Programming Network Routers<br />
* [http://haskell.cs.yale.edu/?page_id=103 Euterpea] - computer music development (also uses [[CCA]])<br />
<br />
== Known forks ==<br />
<br />
* [https://github.com/eamsden/Animas Animas]<br />
** code cleanup<br />
** [http://blog.edwardamsden.com/ Facts and Theories] blog by Edward Amsden<br />
* [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk FRVR]<br />
** restructuring of modules<br />
** [http://imve.informatik.uni-hamburg.de/projects/DIVE DIVE project]<br />
** [http://imve.informatik.uni-hamburg.de/files/71-Blom-Diss-online.pdf Kristopher J. Blom - Dynamic, Interactive Virtual Environments] section 8.3<br />
<br />
[[Category:FRP]]<br />
[[Category:Arrow]]</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa&diff=40670Yampa2011-06-25T16:32:44Z<p>GeroldMeisinger: /* Introduction */ function references</p>
<hr />
<div>Yampa is a domain-specific embedded language for the programming of hybrid (discrete and continious) systems using the concepts of [[Functional Reactive Programming]] (FRP). Yampa is structured using [[Arrow]]s, which greatly reduce the chance of introducing space- and time-leaks into reactive, time-varying systems.<br />
<br />
Yampa was originally developed by the [http://haskell.cs.yale.edu/ Yale Haskell Group].<br />
<br />
'''[http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Yampa Download Yampa]'''<br />
<br />
== Introduction ==<br />
<br />
* [http://www.cs.nott.ac.uk/~nhn/FoPAD2007/Talks/nhn-FoPAD2007.pdf Henrik Nilsson - A Brief Introduction to Functional Reactive Programming and Yampa]<br />
* [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/ Henrik Nilsson - ITU-FRP2010]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture01.pdf ITU-FRP2010 01]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture02.pdf ITU-FRP2010 02]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture03.pdf ITU-FRP2010 03]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture04.pdf ITU-FRP2010 04]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture05.pdf ITU-FRP2010 05]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture06.pdf ITU-FRP2010 06]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture07.pdf ITU-FRP2010 07]<br />
* [http://plucky.cs.yale.edu/CS429F04/LectureSlides/YampaForCs429.ppt Paul Hudak - Yampa, Arrows, and Robots]<br />
* Yampa tutorials by [http://lambdor.net Gerold Meisinger]<br />
** [http://lambdor.net/?p=34 Running primitive signal functions in Yampa]<br />
** [http://lambdor.net/?p=59 Yampa/SDL program stub]<br />
** [http://lambdor.net/?p=44 Learning Yampa and Functional Reactive Programming]<br />
** [http://lambdor.net/?p=209 Diagrams of Yampa switches]<br />
** [http://lambdor.net/?p=117 Dataflow diagram of Yampa reactimate]<br />
** [http://lambdor.net/?p=113 Activity diagram of Yampa reactimate]<br />
* References: [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk/src/foo.ps ps], [http://lambdor.net/wp-content/uploads/2010/12/AFRP-Reference.pdf pdf]<br />
* Videos<br />
** [http://vimeo.com/6632457 Safe Functional Reactive Programming through Dependent Types]<br />
** [http://vimeo.com/6652662 Causal Commutative Arrows and Their Optimization]<br />
<br />
== Primitive signal functions ==<br />
<br />
[[Image:Yampa signal functions.png|768px]]<br />
<br />
(download original [[:Image:Yampa signal functions.svg]])<br />
<br />
== Switches ==<br />
<br />
* [[Yampa/switch|switch]]<br />
* [[Yampa/rSwitch|rSwitch]]<br />
* [[Yampa/rSwitch|kSwitch]]<br />
* [[Yampa/pSwitchB|pSwitchB]]<br />
* [[Yampa/pSwitch|pSwitch]]<br />
* [[Yampa/rpSwitchB|rpSwitchB]]<br />
* [[Yampa/rpSwitch|rpSwitch]]<br />
<br />
== External Links ==<br />
<br />
* [http://mailman.cs.yale.edu/mailman/listinfo/yampa-users Yampa-Users mailing list] - Yampa-related comments, questions, discussions, and announcements. You can also send bug reports to [mailto:yampa-bugs@cs.yale.edu yampa-bugs@cs.yale.edu].<br />
* [http://www.cs.nott.ac.uk/~ggg/ George Giorgidze] created YampaSynth, a modular music synthesizer written in Haskell and using Yampa.<br />
* [http://lambdor.net Blog about Yampa] - introduction tutorials and diagrams<br />
* [http://blog.edwardamsden.com/2011/03/demonstrating-time-leak-in-arrowized.html Demonstrating a Time Leak in Arrowized FRP]<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2011-April/000409.html answer]<br />
<br />
== Known users ==<br />
<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/YampaSynth YampaSynth] - is a software synthesizer implemented in Haskell using Yampa. It contains a framework of sound generating and sound shaping modules (e.g. oscillator, amplifier, mixer, envelope generator, filter, etc.) and example applications.<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/SpaceInvaders Space Invaders]; a video game, demonstrating the usage of Yampa<br />
* [http://haskell.cs.yale.edu/?page_id=376 Nettle] - Programming Network Routers<br />
* [http://haskell.cs.yale.edu/?page_id=103 Euterpea] - computer music development (also uses [[CCA]])<br />
<br />
== Known forks ==<br />
<br />
* [https://github.com/eamsden/Animas Animas]<br />
** code cleanup<br />
** [http://blog.edwardamsden.com/ Facts and Theories] blog by Edward Amsden<br />
* [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk FRVR]<br />
** restructuring of modules<br />
** [http://imve.informatik.uni-hamburg.de/projects/DIVE DIVE project]<br />
** [http://imve.informatik.uni-hamburg.de/files/71-Blom-Diss-online.pdf Kristopher J. Blom - Dynamic, Interactive Virtual Environments] section 8.3<br />
<br />
[[Category:FRP]]<br />
[[Category:Arrow]]</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa&diff=40669Yampa2011-06-24T23:34:28Z<p>GeroldMeisinger: /* External Links */</p>
<hr />
<div>Yampa is a domain-specific embedded language for the programming of hybrid (discrete and continious) systems using the concepts of [[Functional Reactive Programming]] (FRP). Yampa is structured using [[Arrow]]s, which greatly reduce the chance of introducing space- and time-leaks into reactive, time-varying systems.<br />
<br />
Yampa was originally developed by the [http://haskell.cs.yale.edu/ Yale Haskell Group].<br />
<br />
'''[http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Yampa Download Yampa]'''<br />
<br />
== Introduction ==<br />
<br />
* [http://www.cs.nott.ac.uk/~nhn/FoPAD2007/Talks/nhn-FoPAD2007.pdf Henrik Nilsson - A Brief Introduction to Functional Reactive Programming and Yampa]<br />
* [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/ Henrik Nilsson - ITU-FRP2010]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture01.pdf ITU-FRP2010 01]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture02.pdf ITU-FRP2010 02]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture03.pdf ITU-FRP2010 03]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture04.pdf ITU-FRP2010 04]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture05.pdf ITU-FRP2010 05]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture06.pdf ITU-FRP2010 06]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture07.pdf ITU-FRP2010 07]<br />
* [http://plucky.cs.yale.edu/CS429F04/LectureSlides/YampaForCs429.ppt Paul Hudak - Yampa, Arrows, and Robots]<br />
* Yampa tutorials by [http://lambdor.net Gerold Meisinger]<br />
** [http://lambdor.net/?p=34 Running primitive signal functions in Yampa]<br />
** [http://lambdor.net/?p=59 Yampa/SDL program stub]<br />
** [http://lambdor.net/?p=44 Learning Yampa and Functional Reactive Programming]<br />
** [http://lambdor.net/?p=209 Diagrams of Yampa switches]<br />
** [http://lambdor.net/?p=117 Dataflow diagram of Yampa reactimate]<br />
** [http://lambdor.net/?p=113 Activity diagram of Yampa reactimate]<br />
* Videos<br />
** [http://vimeo.com/6632457 Safe Functional Reactive Programming through Dependent Types]<br />
** [http://vimeo.com/6652662 Causal Commutative Arrows and Their Optimization]<br />
<br />
== Primitive signal functions ==<br />
<br />
[[Image:Yampa signal functions.png|768px]]<br />
<br />
(download original [[:Image:Yampa signal functions.svg]])<br />
<br />
== Switches ==<br />
<br />
* [[Yampa/switch|switch]]<br />
* [[Yampa/rSwitch|rSwitch]]<br />
* [[Yampa/rSwitch|kSwitch]]<br />
* [[Yampa/pSwitchB|pSwitchB]]<br />
* [[Yampa/pSwitch|pSwitch]]<br />
* [[Yampa/rpSwitchB|rpSwitchB]]<br />
* [[Yampa/rpSwitch|rpSwitch]]<br />
<br />
== External Links ==<br />
<br />
* [http://mailman.cs.yale.edu/mailman/listinfo/yampa-users Yampa-Users mailing list] - Yampa-related comments, questions, discussions, and announcements. You can also send bug reports to [mailto:yampa-bugs@cs.yale.edu yampa-bugs@cs.yale.edu].<br />
* [http://www.cs.nott.ac.uk/~ggg/ George Giorgidze] created YampaSynth, a modular music synthesizer written in Haskell and using Yampa.<br />
* [http://lambdor.net Blog about Yampa] - introduction tutorials and diagrams<br />
* [http://blog.edwardamsden.com/2011/03/demonstrating-time-leak-in-arrowized.html Demonstrating a Time Leak in Arrowized FRP]<br />
** [http://mailman.cs.yale.edu/pipermail/yampa-users/2011-April/000409.html answer]<br />
<br />
== Known users ==<br />
<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/YampaSynth YampaSynth] - is a software synthesizer implemented in Haskell using Yampa. It contains a framework of sound generating and sound shaping modules (e.g. oscillator, amplifier, mixer, envelope generator, filter, etc.) and example applications.<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/SpaceInvaders Space Invaders]; a video game, demonstrating the usage of Yampa<br />
* [http://haskell.cs.yale.edu/?page_id=376 Nettle] - Programming Network Routers<br />
* [http://haskell.cs.yale.edu/?page_id=103 Euterpea] - computer music development (also uses [[CCA]])<br />
<br />
== Known forks ==<br />
<br />
* [https://github.com/eamsden/Animas Animas]<br />
** code cleanup<br />
** [http://blog.edwardamsden.com/ Facts and Theories] blog by Edward Amsden<br />
* [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk FRVR]<br />
** restructuring of modules<br />
** [http://imve.informatik.uni-hamburg.de/projects/DIVE DIVE project]<br />
** [http://imve.informatik.uni-hamburg.de/files/71-Blom-Diss-online.pdf Kristopher J. Blom - Dynamic, Interactive Virtual Environments] section 8.3<br />
<br />
[[Category:FRP]]<br />
[[Category:Arrow]]</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa&diff=40668Yampa2011-06-24T23:29:31Z<p>GeroldMeisinger: </p>
<hr />
<div>Yampa is a domain-specific embedded language for the programming of hybrid (discrete and continious) systems using the concepts of [[Functional Reactive Programming]] (FRP). Yampa is structured using [[Arrow]]s, which greatly reduce the chance of introducing space- and time-leaks into reactive, time-varying systems.<br />
<br />
Yampa was originally developed by the [http://haskell.cs.yale.edu/ Yale Haskell Group].<br />
<br />
'''[http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Yampa Download Yampa]'''<br />
<br />
== Introduction ==<br />
<br />
* [http://www.cs.nott.ac.uk/~nhn/FoPAD2007/Talks/nhn-FoPAD2007.pdf Henrik Nilsson - A Brief Introduction to Functional Reactive Programming and Yampa]<br />
* [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/ Henrik Nilsson - ITU-FRP2010]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture01.pdf ITU-FRP2010 01]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture02.pdf ITU-FRP2010 02]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture03.pdf ITU-FRP2010 03]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture04.pdf ITU-FRP2010 04]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture05.pdf ITU-FRP2010 05]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture06.pdf ITU-FRP2010 06]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture07.pdf ITU-FRP2010 07]<br />
* [http://plucky.cs.yale.edu/CS429F04/LectureSlides/YampaForCs429.ppt Paul Hudak - Yampa, Arrows, and Robots]<br />
* Yampa tutorials by [http://lambdor.net Gerold Meisinger]<br />
** [http://lambdor.net/?p=34 Running primitive signal functions in Yampa]<br />
** [http://lambdor.net/?p=59 Yampa/SDL program stub]<br />
** [http://lambdor.net/?p=44 Learning Yampa and Functional Reactive Programming]<br />
** [http://lambdor.net/?p=209 Diagrams of Yampa switches]<br />
** [http://lambdor.net/?p=117 Dataflow diagram of Yampa reactimate]<br />
** [http://lambdor.net/?p=113 Activity diagram of Yampa reactimate]<br />
* Videos<br />
** [http://vimeo.com/6632457 Safe Functional Reactive Programming through Dependent Types]<br />
** [http://vimeo.com/6652662 Causal Commutative Arrows and Their Optimization]<br />
<br />
== Primitive signal functions ==<br />
<br />
[[Image:Yampa signal functions.png|768px]]<br />
<br />
(download original [[:Image:Yampa signal functions.svg]])<br />
<br />
== Switches ==<br />
<br />
* [[Yampa/switch|switch]]<br />
* [[Yampa/rSwitch|rSwitch]]<br />
* [[Yampa/rSwitch|kSwitch]]<br />
* [[Yampa/pSwitchB|pSwitchB]]<br />
* [[Yampa/pSwitch|pSwitch]]<br />
* [[Yampa/rpSwitchB|rpSwitchB]]<br />
* [[Yampa/rpSwitch|rpSwitch]]<br />
<br />
== External Links ==<br />
<br />
* [http://mailman.cs.yale.edu/mailman/listinfo/yampa-users Yampa-Users mailing list] - Yampa-related comments, questions, discussions, and announcements. You can also send bug reports to [mailto:yampa-bugs@cs.yale.edu yampa-bugs@cs.yale.edu].<br />
* [http://www.cs.nott.ac.uk/~ggg/ George Giorgidze] created YampaSynth, a modular music synthesizer written in Haskell and using Yampa.<br />
* [http://lambdor.net Blog about Yampa] - introduction tutorials and diagrams<br />
* [http://blog.edwardamsden.com/2011/03/demonstrating-time-leak-in-arrowized.html Demonstrating a Time Leak in Arrowized FRP]<br />
<br />
== Known users ==<br />
<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/YampaSynth YampaSynth] - is a software synthesizer implemented in Haskell using Yampa. It contains a framework of sound generating and sound shaping modules (e.g. oscillator, amplifier, mixer, envelope generator, filter, etc.) and example applications.<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/SpaceInvaders Space Invaders]; a video game, demonstrating the usage of Yampa<br />
* [http://haskell.cs.yale.edu/?page_id=376 Nettle] - Programming Network Routers<br />
* [http://haskell.cs.yale.edu/?page_id=103 Euterpea] - computer music development (also uses [[CCA]])<br />
<br />
== Known forks ==<br />
<br />
* [https://github.com/eamsden/Animas Animas]<br />
** code cleanup<br />
** [http://blog.edwardamsden.com/ Facts and Theories] blog by Edward Amsden<br />
* [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk FRVR]<br />
** restructuring of modules<br />
** [http://imve.informatik.uni-hamburg.de/projects/DIVE DIVE project]<br />
** [http://imve.informatik.uni-hamburg.de/files/71-Blom-Diss-online.pdf Kristopher J. Blom - Dynamic, Interactive Virtual Environments] section 8.3<br />
<br />
[[Category:FRP]]<br />
[[Category:Arrow]]</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa/pSwitch&diff=40667Yampa/pSwitch2011-06-24T23:27:46Z<p>GeroldMeisinger: </p>
<hr />
<div>[[Image:Yampa pSwitch.png|768px]]<br />
<br />
<source lang="haskell"><br />
pSwitch :: Functor col<br />
=> (forall sf. (in -> col sf -> col (ext, sf)))<br />
-> col (SF ext out)<br />
-> SF (in, col out) (Event mng)<br />
-> (col (SF ext out) -> mng -> SF in (col out))<br />
-> SF in (col out)<br />
</source><br />
<br />
(download original [[:Image:Yampa pSwitch.svg|Yampa pSwitch.svg]])<br />
<br />
{{Yampa Switches}}</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa/rSwitch&diff=40666Yampa/rSwitch2011-06-24T23:27:34Z<p>GeroldMeisinger: </p>
<hr />
<div>[[Image:Yampa rSwitch.png|768px]]<br />
<br />
<source lang="haskell"><br />
rSwitch :: SF in out<br />
-> SF (in, Event (SF in out)) out<br />
</source><br />
<br />
(download original [[:Image:Yampa rSwitch.svg|Yampa rSwitch.svg]])<br />
<br />
{{Yampa Switches}}</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa/rSwitch&diff=40665Yampa/rSwitch2011-06-24T23:26:50Z<p>GeroldMeisinger: </p>
<hr />
<div>[[Image:Yampa rSwitch.png|upright|768px]]<br />
<br />
<source lang="haskell"><br />
rSwitch :: SF in out<br />
-> SF (in, Event (SF in out)) out<br />
</source><br />
<br />
(download original [[:Image:Yampa rSwitch.svg|Yampa rSwitch.svg]])<br />
<br />
{{Yampa Switches}}</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa/pSwitch&diff=40664Yampa/pSwitch2011-06-24T23:26:48Z<p>GeroldMeisinger: </p>
<hr />
<div>[[Image:Yampa pSwitch.png|upright|768px]]<br />
<br />
<source lang="haskell"><br />
pSwitch :: Functor col<br />
=> (forall sf. (in -> col sf -> col (ext, sf)))<br />
-> col (SF ext out)<br />
-> SF (in, col out) (Event mng)<br />
-> (col (SF ext out) -> mng -> SF in (col out))<br />
-> SF in (col out)<br />
</source><br />
<br />
(download original [[:Image:Yampa pSwitch.svg|Yampa pSwitch.svg]])<br />
<br />
{{Yampa Switches}}</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa&diff=40663Yampa2011-06-24T23:20:11Z<p>GeroldMeisinger: /* Switches */</p>
<hr />
<div>Yampa is a domain-specific embedded language for the programming of hybrid (discrete and continious) systems using the concepts of [[Functional Reactive Programming]] (FRP). Yampa is structured using [[Arrow]]s, which greatly reduce the chance of introducing space- and time-leaks into reactive, time-varying systems.<br />
<br />
Yampa was originally developed by the [http://haskell.cs.yale.edu/ Yale Haskell Group].<br />
<br />
'''[http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Yampa Download Yampa]'''<br />
<br />
== Introduction ==<br />
<br />
* [http://www.cs.nott.ac.uk/~nhn/FoPAD2007/Talks/nhn-FoPAD2007.pdf Henrik Nilsson - A Brief Introduction to Functional Reactive Programming and Yampa]<br />
* [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/ Henrik Nilsson - ITU-FRP2010]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture01.pdf ITU-FRP2010 01]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture02.pdf ITU-FRP2010 02]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture03.pdf ITU-FRP2010 03]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture04.pdf ITU-FRP2010 04]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture05.pdf ITU-FRP2010 05]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture06.pdf ITU-FRP2010 06]<br />
** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture07.pdf ITU-FRP2010 07]<br />
* [http://plucky.cs.yale.edu/CS429F04/LectureSlides/YampaForCs429.ppt Paul Hudak - Yampa, Arrows, and Robots]<br />
* Yampa tutorials by [http://lambdor.net Gerold Meisinger]<br />
** [http://lambdor.net/?p=34 Running primitive signal functions in Yampa]<br />
** [http://lambdor.net/?p=59 Yampa/SDL program stub]<br />
** [http://lambdor.net/?p=44 Learning Yampa and Functional Reactive Programming]<br />
** [http://lambdor.net/?p=209 Diagrams of Yampa switches]<br />
** [http://lambdor.net/?p=117 Dataflow diagram of Yampa reactimate]<br />
** [http://lambdor.net/?p=113 Activity diagram of Yampa reactimate]<br />
* Videos<br />
** [http://vimeo.com/6632457 Safe Functional Reactive Programming through Dependent Types]<br />
** [http://vimeo.com/6652662 Causal Commutative Arrows and Their Optimization]<br />
<br />
== Switches ==<br />
<br />
* [[Yampa/switch|switch]]<br />
* [[Yampa/rSwitch|rSwitch]]<br />
* [[Yampa/rSwitch|kSwitch]]<br />
* [[Yampa/pSwitchB|pSwitchB]]<br />
* [[Yampa/pSwitch|pSwitch]]<br />
* [[Yampa/rpSwitchB|rpSwitchB]]<br />
* [[Yampa/rpSwitch|rpSwitch]]<br />
<br />
== External Links ==<br />
<br />
* [http://mailman.cs.yale.edu/mailman/listinfo/yampa-users Yampa-Users mailing list] - Yampa-related comments, questions, discussions, and announcements. You can also send bug reports to [mailto:yampa-bugs@cs.yale.edu yampa-bugs@cs.yale.edu].<br />
* [http://www.cs.nott.ac.uk/~ggg/ George Giorgidze] created YampaSynth, a modular music synthesizer written in Haskell and using Yampa.<br />
* [http://lambdor.net Blog about Yampa] - introduction tutorials and diagrams<br />
* [http://blog.edwardamsden.com/2011/03/demonstrating-time-leak-in-arrowized.html Demonstrating a Time Leak in Arrowized FRP]<br />
<br />
== Known users ==<br />
<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/YampaSynth YampaSynth] - is a software synthesizer implemented in Haskell using Yampa. It contains a framework of sound generating and sound shaping modules (e.g. oscillator, amplifier, mixer, envelope generator, filter, etc.) and example applications.<br />
* [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/SpaceInvaders Space Invaders]; a video game, demonstrating the usage of Yampa<br />
* [http://haskell.cs.yale.edu/?page_id=376 Nettle] - Programming Network Routers<br />
* [http://haskell.cs.yale.edu/?page_id=103 Euterpea] - computer music development (also uses [[CCA]])<br />
<br />
== Known forks ==<br />
<br />
* [https://github.com/eamsden/Animas Animas]<br />
** code cleanup<br />
** [http://blog.edwardamsden.com/ Facts and Theories] blog by Edward Amsden<br />
* [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk FRVR]<br />
** restructuring of modules<br />
** [http://imve.informatik.uni-hamburg.de/projects/DIVE DIVE project]<br />
** [http://imve.informatik.uni-hamburg.de/files/71-Blom-Diss-online.pdf Kristopher J. Blom - Dynamic, Interactive Virtual Environments] section 8.3<br />
<br />
[[Category:FRP]]<br />
[[Category:Arrow]]</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa/rpSwitchB&diff=40662Yampa/rpSwitchB2011-06-24T23:19:35Z<p>GeroldMeisinger: </p>
<hr />
<div>[[Image:Yampa rpSwitchB.png|768px]]<br />
<br />
<source lang="haskell"><br />
rpSwitchB :: Functor col<br />
=> col (SF in out)<br />
-> SF (in, Event ( col (SF in out)<br />
-> col (SF in out)))<br />
(col out)<br />
</source><br />
<br />
(download original [[:Image:Yampa rpSwitchB.svg|Yampa rpSwitchB.svg]])<br />
<br />
{{Yampa Switches}}</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=File:Yampa_rpSwitchB.svg&diff=40661File:Yampa rpSwitchB.svg2011-06-24T23:19:29Z<p>GeroldMeisinger: Fonts: http://ftp.univie.ac.at/packages/tex/help/Catalogue/entries/bakoma-fonts.html</p>
<hr />
<div>Fonts: http://ftp.univie.ac.at/packages/tex/help/Catalogue/entries/bakoma-fonts.html</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=File:Yampa_rpSwitchB.png&diff=40660File:Yampa rpSwitchB.png2011-06-24T23:18:49Z<p>GeroldMeisinger: </p>
<hr />
<div></div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa/pSwitch&diff=40659Yampa/pSwitch2011-06-24T23:17:29Z<p>GeroldMeisinger: </p>
<hr />
<div>[[Image:Yampa pSwitch.png|768px]]<br />
<br />
<source lang="haskell"><br />
pSwitch :: Functor col<br />
=> (forall sf. (in -> col sf -> col (ext, sf)))<br />
-> col (SF ext out)<br />
-> SF (in, col out) (Event mng)<br />
-> (col (SF ext out) -> mng -> SF in (col out))<br />
-> SF in (col out)<br />
</source><br />
<br />
(download original [[:Image:Yampa pSwitch.svg|Yampa pSwitch.svg]])<br />
<br />
{{Yampa Switches}}</div>GeroldMeisingerhttps://wiki.haskell.org/index.php?title=Yampa/pSwitchB&diff=40658Yampa/pSwitchB2011-06-24T23:17:23Z<p>GeroldMeisinger: </p>
<hr />
<div>[[Image:Yampa pSwitchB.png|768px]]<br />
<br />
<source lang="haskell"><br />
pSwitchB :: Functor col<br />
=> col (SF in out)<br />
-> SF (in, col out) (Event mng)<br />
-> (col (SF in out) -> mng -> SF in (col out))<br />
-> SF in (col out)<br />
</source><br />
<br />
(download original [[:Image:Yampa pSwitchB.svg|Yampa pSwitchB.svg]])<br />
<br />
{{Yampa Switches}}</div>GeroldMeisinger