Difference between revisions of "Yampa"
Jump to navigation
Jump to search
(Added a link to the Yampa package at Hackage; added remarks about bit rotten software) |
|||
(34 intermediate revisions by 4 users not shown) | |||
Line 1: | Line 1: | ||
− | Yampa is a domain-specific embedded language for the programming of hybrid 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. |
+ | 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. |
− | Yampa was originally developed by the [http://haskell.cs.yale.edu/ |
+ | 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]]. |
+ | Hackage: {{HackagePackage|id=Yampa}} |
||
− | == Downloads == |
||
− | * [http://hackage.haskell.org/cgi-bin/hackage-scripts/package/Yampa The Yampa package] |
||
+ | == Introduction == |
||
− | === Yale Haskell Group === |
||
+ | * [http://www.cs.nott.ac.uk/~nhn/FoPAD2007/Talks/nhn-FoPAD2007.pdf Henrik Nilsson - A Brief Introduction to Functional Reactive Programming and Yampa] |
||
− | * [http://haskell.org/yampa/Yampa-0.9.1.tgz Robotics Simulator Bundle v0.9.1] (dated 2002-10-17) |
||
+ | * [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/ Henrik Nilsson - ITU-FRP2010] |
||
− | * AFRP Release 0.4 (will not compile with recent GHC): |
||
+ | ** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture01.pdf ITU-FRP2010 01] |
||
− | ** [http://haskell.org/yampa/RELNOTES.txt Release Notes for 0.4] |
||
+ | ** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture02.pdf ITU-FRP2010 02] |
||
− | ** [http://haskell.org/yampa/afrp-0.4-src.tgz x86 / Linux Source Code] |
||
+ | ** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture03.pdf ITU-FRP2010 03] |
||
− | ** [http://haskell.org/yampa/afrp-0.4-win32-src.tgz Windows Source Code] |
||
+ | ** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture04.pdf ITU-FRP2010 04] |
||
+ | ** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture05.pdf ITU-FRP2010 05] |
||
+ | ** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture06.pdf ITU-FRP2010 06] |
||
+ | ** [http://www.cs.nott.ac.uk/~nhn/ITU-FRP2010/LectureNotes/lecture07.pdf ITU-FRP2010 07] |
||
+ | * [http://plucky.cs.yale.edu/CS429F04/LectureSlides/YampaForCs429.ppt Paul Hudak - Yampa, Arrows, and Robots] |
||
+ | * Yampa tutorials by [http://lambdor.net Gerold Meisinger] |
||
+ | ** [http://lambdor.net/?p=34 Running primitive signal functions in Yampa] |
||
+ | ** [http://lambdor.net/?p=59 Yampa/SDL program stub] |
||
+ | ** [http://lambdor.net/?p=44 Learning Yampa and Functional Reactive Programming] |
||
+ | ** [http://lambdor.net/?p=209 Diagrams of Yampa switches] |
||
+ | ** [http://lambdor.net/?p=117 Dataflow diagram of Yampa reactimate] |
||
+ | ** [http://lambdor.net/?p=113 Activity diagram of Yampa reactimate] |
||
+ | * [https://github.com/shaleny/lazyfoo shaleny LazyFoo SDL examples] translated to Haskell/Yampa (lecture 16-) |
||
+ | * 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] |
||
+ | * Videos |
||
+ | ** [http://vimeo.com/6632457 Safe Functional Reactive Programming through Dependent Types] |
||
+ | ** [http://vimeo.com/6652662 Causal Commutative Arrows and Their Optimization] |
||
+ | ** [http://www.youtube.com/watch?v=xtmo6Bmfahc Euterpea: From signals to symphonies] |
||
+ | == Primitive signal functions == |
||
− | === Others === |
||
+ | [[Image:Yampa signal functions.png|768px]] |
||
− | ==== George Giorgidze ==== |
||
+ | (download original [[:Image:Yampa signal functions.svg]]) |
||
⚫ | * |
||
+ | |||
+ | == Switches == |
||
+ | |||
+ | * [[Yampa/switch|switch]] |
||
+ | * [[Yampa/rSwitch|rSwitch]] |
||
+ | * [[Yampa/kSwitch|kSwitch]] |
||
+ | * [[Yampa/pSwitchB|pSwitchB]] |
||
+ | * [[Yampa/pSwitch|pSwitch]] |
||
+ | * [[Yampa/rpSwitchB|rpSwitchB]] |
||
+ | * [[Yampa/rpSwitch|rpSwitch]] |
||
+ | |||
+ | Each switch comes in two different flavors: |
||
+ | # ''immediate'': switch to the new behaviour immediately and also calculate the return value based on the new behaviour. |
||
+ | # ''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'. |
||
+ | |||
+ | == Reactimation == |
||
+ | |||
+ | * [[Yampa/reactimate|reactimate]] |
||
+ | * [[Yampa/game_engine|Game engine]] |
||
== External Links == |
== External Links == |
||
− | * [http://haskell.org/yampa/ Yampa Home Page] |
||
* [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]. |
* [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]. |
||
− | * [http://www.cs.nott.ac.uk/~ggg/ George Giorgidze] |
+ | * [http://www.cs.nott.ac.uk/~ggg/ George Giorgidze] created YampaSynth, a modular music synthesizer written in Haskell and using Yampa. |
+ | * [http://www.cs.yale.edu/homes/hl293] - Hai (Paul) Liu papers and slides |
||
+ | * [http://lambdor.net Blog about Yampa] - introduction tutorials and diagrams |
||
+ | * [http://blog.edwardamsden.com/2011/03/demonstrating-time-leak-in-arrowized.html Demonstrating a Time Leak in Arrowized FRP] |
||
+ | ** [http://mailman.cs.yale.edu/pipermail/yampa-users/2011-April/000409.html answer] |
||
+ | |||
+ | == Known users == |
||
+ | |||
+ | [https://www.google.com/search?hl=en&q=yampa%20site%3Ahackage.haskell.org%2Fpackage&aqi=g10 search Hackage] |
||
+ | |||
⚫ | |||
+ | * [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) |
||
+ | * {{HackagePackage|id=SpaceInvaders}}; a video game, demonstrating the usage of Yampa |
||
+ | * {{HackagePackage|id=Cuboid}}; a small puzzle game |
||
+ | * {{HackagePackage|id=Haskelloids}}; asteroids clone |
||
+ | * [http://haskell.cs.yale.edu/?page_id=376 Nettle] - Programming Network Routers |
||
+ | * [http://haskell.cs.yale.edu/?page_id=103 Euterpea] - computer music development (also uses [[CCA]]) |
||
+ | * {{HackagePackage|id=YFrob}}; robot simulation |
||
+ | |||
+ | [https://github.com/search?q=yampa&repo=&langOverride=&start_value=1&type=Everything&language=Haskell search Github] |
||
+ | |||
+ | * [https://github.com/harleyttd/hamball Hamball] |
||
+ | * [https://github.com/werk/YampaShooter YampaShooter] |
||
+ | |||
+ | == Known forks == |
||
+ | |||
+ | * [https://github.com/ony/Yampa-core Yampa-core] |
||
+ | ** [http://mailman.cs.yale.edu/pipermail/yampa-users/2012-May/ related discussion] |
||
+ | * [https://github.com/eamsden/Animas Animas] |
||
+ | ** code cleanup |
||
+ | ** [http://blog.edwardamsden.com/ Facts and Theories] blog by Edward Amsden |
||
+ | * [https://frvr.svn.sourceforge.net/svnroot/frvr/AFRP/trunk FRVR] |
||
+ | ** restructuring of modules |
||
+ | ** [http://imve.informatik.uni-hamburg.de/projects/DIVE DIVE project] |
||
+ | ** [http://imve.informatik.uni-hamburg.de/files/71-Blom-Diss-online.pdf Kristopher J. Blom - Dynamic, Interactive Virtual Environments] section 8.3 |
||
+ | |||
+ | [[Category:FRP]] |
||
+ | [[Category:Arrow]] |
||
+ | [[Category:Music]] |
||
+ | [[Category:Robotics]] |
Revision as of 20:49, 7 October 2012
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 Arrows, which greatly reduce the chance of introducing space- and time-leaks into reactive, time-varying systems.
Yampa was originally developed by the Yale Haskell Group based on the original idea of Conal Elliott's Fran.
Hackage: Yampa
Introduction
- Henrik Nilsson - A Brief Introduction to Functional Reactive Programming and Yampa
- Henrik Nilsson - ITU-FRP2010
- Paul Hudak - Yampa, Arrows, and Robots
- Yampa tutorials by Gerold Meisinger
- shaleny LazyFoo SDL examples translated to Haskell/Yampa (lecture 16-)
- References: ps, pdf
- Videos
Primitive signal functions
(download original Image:Yampa signal functions.svg)
Switches
Each switch comes in two different flavors:
- immediate: switch to the new behaviour immediately and also calculate the return value based on the new behaviour.
- 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'.
Reactimation
External Links
- Yampa-Users mailing list - Yampa-related comments, questions, discussions, and announcements. You can also send bug reports to yampa-bugs@cs.yale.edu.
- George Giorgidze created YampaSynth, a modular music synthesizer written in Haskell and using Yampa.
- [1] - Hai (Paul) Liu papers and slides
- Blog about Yampa - introduction tutorials and diagrams
- Demonstrating a Time Leak in Arrowized FRP
Known users
- 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.
- Frag; a simple Quake 3 clone, using a very early version of Yampa called arrowized functional reactive programming (AFRP)
- SpaceInvaders; a video game, demonstrating the usage of Yampa
- Cuboid; a small puzzle game
- Haskelloids; asteroids clone
- Nettle - Programming Network Routers
- Euterpea - computer music development (also uses CCA)
- YFrob; robot simulation
Known forks
- Yampa-core
- Animas
- code cleanup
- Facts and Theories blog by Edward Amsden
- FRVR
- restructuring of modules
- DIVE project
- Kristopher J. Blom - Dynamic, Interactive Virtual Environments section 8.3