
To keep with the example, something like drawUnitRectangle <$> mousePosition would result in a signal whose points are IO actions that draw the rectangle where the mouse is at the moment you sample them.
And just as IO is unnecessary for behavior (functions of time), it's also
unnecessary for imagery (functions of space). Continuing with the
functional (non-IO) theme, you can give a semantically precise, composable
and simple type of images.
- Conal
2009/4/10 Patai Gergely
I've seen alot of FRP libraries come up, and I'm always left with the question, "Where the heck are the FRP tutorials?" Writing a good tutorial takes a lot of time, but I made some example code precisely to show how the library can be used. The best way to learn is to start playing with them. The "chase" example is about as small as it gets, and the breakout one is generally a nice test case for such a library, as it exercises the code as well as provides a reasonably complex example for the user to study.
The basic idea is indeed what Achim said: we refer to the whole lifetime of some time-varying quantity (what I call a signal, but the name behaviour is also often used for this concept in other systems) with a single name. For instance, mousePosition is a two-dimensional vector whose value follows the position of the mouse at any time. The applicative interface means that you can combine signals using ordinary point-wise functions by simple lifting. To keep with the example, something like drawUnitRectangle <$> mousePosition would result in a signal whose points are IO actions that draw the rectangle where the mouse is at the moment you sample them. The drawUnitRectangle function doesn't need to have anything reactive in it, it just takes an ordinary pair (or whatever you represent your vectors with) and does its job.
In the end, a program working with signals looks very much like one calculating a snapshot of the system and the state changes at the given moment, except you need to insert <*>'s and lift values where applicable.
Gergely
-- http://www.fastmail.fm - mmm... Fastmail...
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe