Yampa Book
main

Contents:

  • Introduction
  • Embedding
  • Reactimation
  • Yampa
  • User interfaces
  • Cheatsheet
  • Links
    • Main Yampa papers
    • All Yampa papers
    • Non-english Yampa papers
      • German
    • FRP papers
    • Other papers
    • Codedocs
    • Repos
    • Examples
    • Tutorials
    • Old Yampa Examples
    • Libraries
    • Books
    • TODO
  • Frequently Asked Questions
  • Glossary
  • Contributing
Yampa Book
  • Links
  • Edit on GitLab

Links

Main Yampa papers

[YamCade03]

The Yampa Arcade (2003) by Antony Courtney, Henrik Nilsson, John Peterson (archived)

Simulated worlds are a common (and highly lucrative) application domain that stretches from detailed simulation of physical systems to elaborate video game fantasies. We believe that Functional Reactive Programming (FRP) provides just the right level of functionality to develop simulated worlds in a concise, clear and modular way. We demonstrate the use of FRP in this domain by presenting an implementation of the classic “Space Invaders” game in Yampa, our most recent Haskell-embedded incarnation of FRP.

[FrpRefac16]

Functional Reactive Programming, Refactored (2016) by Ivan Perez, Manuel Bärenz, Henrik Nilsson

Functional Reactive Programming (FRP) has come to mean many things. Yet, scratch the surface of the multitude of realisations, and there is great commonality between them. This paper investigates this commonality, turning it into a mathematically coherent andpractical FRP realisation that allows us to express the functionality of many existing FRP systems and beyond by providing a minimal FRP core parametrised on a monad. We give proofs for our theoretical claims and we have verified the practical side by benchmarking a set of existing, non-trivial Yampa applications running on top ofour new system with very good results.

[FrpExt17]

Extensible and Robust Functional Reactive Programming (2017) by Iván Pérez Domínguez, MSc (First Year Report)

Programming GUI and multimedia in functional languages has been a long-term challenge, and no solution convinces the community at large. Purely functional GUI and multimedia toolkits enable abstract thinking, but have enormous maintenance costs. General solutions like Functional Reactive Programming present a number of limitations. FRP has traditionally resisted efficient implementation, and existing libraries sacrifice determinism and abstraction in the name of performance. FRP also enforces structural constraints that facilitate reasoning, but at the cost of modularity and separation of concerns. This work addresses those limitations with the introduction of Monadic Stream Functions, anextension to FRP parameterised over a monad. I demonstrate that, in spite of being simpler thanother FRP proposals, Monadic Stream Functions subsume and exceed other FRP implementations. Unlike other proposals, Monadic Stream Functions maintain purity at the type level, whichis crucial for testing and debugging. I demonstrate this advantage by introducing FRP testingfacilities based on temporal logics, together with debugging tools specific for FRP. I present two uses cases for Monadic Stream Functions: First, I show how the new constructsimproved the design of game features and non-trivial games. Second, I present Reactive Valuesand Relations, an abstraction for model-view coordination in GUI programs based on a relationallanguage, built on top of Monadic Stream Functions. Comprehensive examples are used to illustrate the benefits of this proposal in terms of clarity, modularity, feature coverage, and its low maintenance costs. The testing facilities mentioned before are used to encode and statically checkdesired interaction properties.

All Yampa papers

Sorted newest first:

[TestDebugFrp17]

Testing and Debugging Functional Reactive Programming (2017) by Ivan Perez, Henrik Nilsson

[CcaRevisit16]

Causal Commutative Arrows Revisited (2016) by Jeremy Yallop, Hai Liu

[SetNonInfFrp14]

Settable and Non-Interfering Signal Functions for FRP (2014) by Daniel Winograd-Cort, Paul Hudak (more)

[SwitchOn08]

Switched-On Yampa (2008) by George Giorgidze, Henrik Nilsson

[DynInterVR08]

Dynamic, Interactive Virtual Environments (2008) by Kristopher James Blom

[Fp3dGames05]

Functional Programming and 3D Games (2005) by Mun Hon Cheong

[ArrRobFrp03]

Arrows, robots, and Functional Reactive Programming (2003) by Paul Hudak, Antony Courtney, Henrik Nilsson, John Peterson

[FrpCont02]

Functional Reactive Programming, Continued (2002) by Henrik Nilsson, Antony Courtney and John Peterson

  • Wormholes: Introducing Effects to FRP (2012) by Daniel Winograd-Cort, Paul Hudak (video)

  • Virtualizing Real-World Objects in FRP (2011) by Daniel Winograd-Cort, Hai Liu, Paul Hudak

  • Causal commutative arrows and their optimization (2009) by Hai Liu, Eric Cheng, and Paul Hudak

  • Demo-outline: Switched-on Yampa: Programming Modular Synthesizers in Haskell (2007) by George Giorgidze, Henrik Nilsson

  • Plugging a space leak with an arrow (2007) by Hai Liu, Paul Hudak

  • Dynamic optimization for functional reactive programming using generalized algebraic data types (2005) by Henrik Nilsson

Non-english Yampa papers

German

[GamArchYam10]

Game-Engine-Architektur mit funktional-reaktiver Programmierung in Haskell/Yampa (2010) von Gerold Meisinger

[VisIdeAfrp07]

Visuelle Entwicklungsumgebung zur Erzeugung von Haskell AFRP Code (2007) von Piotr Szal

FRP papers

Sorted newest first:

[MathPropMSF16]

Mathematical Properties of Monadic Stream Functions (2016) by Manuel Bärenz, Ivan Perez, Henrik Nilsson

[SurvFrp10]

A Survey of Functional Reactive Programming (2010) by Edward Amsden (archived)

[PushPullFrp09]

Push-pull functional reactive programming (2009) by Conal Elliott (video) (slides)

[SafeFrpDep09]

Safe functional reactive programming through dependent types (2009) by Neil Sculthorpe, Henrik Nilsson (video)

[GenuineUI01]

Genuinely Functional User Interfaces (2001) by Antony Courtney and Conal Elliott

  • Back to the Future: Time Travel in FRP (2017) by Ivan Perez

  • Rhine - frp with type-level clocks (2016) by Manuel Bärenz

  • Higher-order functional reactive programming without spacetime leaks (2013) by N. R. Krishnaswami

  • Push-Pull Signal-Function Functional Reactive Programming (2012) by E. Amsden

  • Higher-order functional reactive pro- gramming in bounded space (2012) by N. R. Krishnaswami, N. Benton, J. Hoffmann

  • Improving Push-based FRP (2008) by W. Jeltsch

  • E-FRP with priorities (2007) by R. Kaiabachev, W. Taha, A. Zhu

  • Plugging a space leak with an arrow (2007) by Hai Liu, Paul Hudak

  • Functional Reactive Programming for Real-Time Reactive Systems (2002) by Wan, Zhanyong

  • Event-driven FRP (2002) by Z. Wan, W. Taha, P. Hudak

  • Real-time FRP (2001) by Z. Wan, W. Taha, and P. Hudak

  • Functional reactive programming from first principles (2000) by Zhanyong Wan, Paul Hudak

  • Functional reactive animation (1997) by Conal Elliott, Paul Hudak

  • Reification of time in FRP

  • Functional reactive programming for real-time reactive systems (2002) by Zhanyong Wan

  • Fault tolerant functional reactive programming (2018) by Ivan Perez

Todo

split up technical papers and tutorials

Other papers

Sorted oldest first:

[WhyFP90]

Why functional programming matters (1990) by John Hughes

[MonadFP95]

Monads for functional programming (1995) Philip Wadler

[GenMonArr00]

Generalising monads to arrows (2000) by John Hughes

[NewNotatArr01]

A New Notation for Arrows (2001) by Ross Paterson

[AllMonads03]

All About Monads (2003) Jeff Newbern

[ArrComp03]

Arrows and Computation (2003) by Ross Paterson

[ProgArr05]

Programming with Arrows (2005) by John Hughes

[AppProg08]

Applicative Programming with Effects (2008) by Conor McBride, Ross Paterson

  • Notions of computation and monads (1991) by Moggi

  • Comprehending monads (1992) by Philip Wadler

Todo

where is the 2000 version of Generalising monads to arrows online?

Codedocs

  • Hackage Dunai

    • Hackage Dunai - Core

  • Hackage BearRiver

  • Hackage Yampa (old Yampa!)

Repos

  • https://github.com/ivanperez-keera/Yampa

    • https://github.com/keera-studios/keera-hails/tree/develop/keera-hails-reactive-yampa

  • https://github.com/ivanperez-keera/dunai

    • https://github.com/ivanperez-keera/dunai/tree/develop/dunai-frp-bearriver

  • https://github.com/turion/rhine

Examples

  • SpaceInvaders

  • Haskanoid

  • Bearriver Arcade

  • Pang-a-Lambda

  • e1338

  • 2048

  • MandelbrotYampa

Todo

include from https://github.com/ivanperez-keera/Yampa/

Tutorials

  • Yampy Cube by Konstantin Zudov at Helsinki FRP Meetup May 6, 2015 (video)

  • Brief Introduction to Functional Reactive Programming and Yampa (2007) Henrik Nilsson

  • wiki.haskell.org Yampa (old Yampa)

    • wiki.haskell.org Yampa/reactimate (old Yampa)

  • The Yampa Arcade - Slides (archived: [1] (old Yampa)

  • Yampa, Arrows, and Robots by Paul Hudak (old Yampa)

  • Keera Studios Blog

    • Building a reactive calculator in Haskell

Old Yampa Examples

  • https://github.com/pedromartins/cuboid

    • https://www.youtube.com/watch?v=-IpE0CyHK7Q

  • https://github.com/helsinki-frp/yampy-cube

  • https://github.com/werk/YampaShooter

  • Vehicle Platooning Simulations with Functional Reactive Programming

  • Stackoverflow - Is there a way to create a Signal Function out of getLine in Yampa using reactimate

  • Stackoverflow - N-body with Yampa FRP, haskell

Libraries

  • Euterpea

  • reactive-banana

  • elera

  • elm

  • TODO

Books

[HaskExpr00]

The Haskell School of Expression (2000) by Paul Hudak

[HaskHiPerf16]

Haskell High Performance Programming - Chapter 13: Functional Reactive Programming (2016) by Samuli Thomasson

[ManningFrp16]

Functional Reactive Programming (2016) by Stephen Blackheath, Anthony Jones

[GameProgHask15]

Game programming in Haskell (2015) by Elise Huard

[LearnGood11]

Learn You A Haskell For Great Good! (2011) by Miran Lipovaca

TODO

  • Bridging the GUI Gap with Reactive Values and Relations (2005) by Ivan Perez, Henrik Nilsson

  • Fault-Tolerant Swarms

  • The essence and origins of FRP (2015) by Conal Elliott

  • FRP Zoo

  • Controlling Time and Space: understanding the many formulations of FRP” (2014) by Evan Czaplicki

  • Imperative functional programming?

  • https://www.youtube.com/watch?v=1MNTerD8IuI

  • Wayward Tide was written in Haskell?

  • https://notebook.readthedocs.io/en/latest/haskell/learn-you-a-haskell/chapter-2.html

    1. Victor, “Inventing on Principle.” http://vimeo.com/36579366, 2011

  • Declarative Game Programming (2014) by Henrik Nilsson, Ivan Perez (slides)

  • Roy, Peter Van und Seif Haridi: Concepts, Techniques, and Models of Computer Programming. MIT Press, 2004.

  • Asynchronous functional reactive programming for GUIs (2013) by E. Czaplicki and S. Chong

  • A survey on reactive programming by E. Bainomugisha, A. L. Carreton, T. v. Cutsem, S. Mostinckx, and W. d. Meuter

  • https://imve.informatik.uni-hamburg.de/files/116-blom_beckhaus_DIVE_VR.pdf

  • https://imve.informatik.uni-hamburg.de/files/55-SEARISworkshop_DIVEs-FRVR.pdf

  • Dunai Issue 236 - Bearriver: ArrowLoop yampa and bearriver differences

  • Dunai Issue 245 - using embed with a constant 1.0 MSF to get (printable) results

  • Dunai Issue 174 - Space Leak

  • Cogs and Levers - Functional Reactive Programming with Yampa

Previous Next

© Copyright 2021, Gerold Meisinger. Revision 88f9371b.

Built with Sphinx using a theme provided by Read the Docs.