[reactive] Status of Reactive "feedback" (recursive integral, etc)
Conal Elliott
conal at conal.net
Tue Dec 2 18:49:57 EST 2008
Hi Peter,
Thanks for asking about this issue.
If I understood it correctly, it Conal's aim to provide just a single
> integral function that can handle both the recursive and regular cases?
>
> But, is this even possible?
>
Yes. The semantics of reactivity, plus the laziness of Haskell and some
careful programming, makes it possible. I did it long ago in Fran.
Currently the implementation of snapshot (which integral uses) is not lazy
enough for recursive snapshots to work. Chuan-kai Lin came up with a
solution, which I think created a space leak. Richard Smith came up with
essentially the same solution (and leak), and has been continuing to pursue
a sufficiently lazy and space-tight. Today, Richard attached his patch to
ticket # 14 on the Reactive tracker (
http://trac.haskell.org/reactive/ticket/14). I'll check it out and
integrate it if I think it will improve things.
In case anyone's curious, the crucial semantic decision is to have reactive
behaviors change immediately after an event occurs. (Really immediately --
not some finite positive delay.) Thus an event can take a snapshot of a
behavior at the moment that the behavior is reacting to that very event.
The behavior and event are defined in terms of each other, in a well-defined
and useful way.
- Conal
2008/12/2 Peter Verswyvelen <bugfact at gmail.com>
> This has been brought up before, but I'm not sure about the current status
> our consensus regarding "recursive feedback" in Reactive.
> In Yampa this is solved by the ArrowLoop instance, and by having two
> different integral functions: one with a delay and without a delay.
>
> If I understood it correctly, it Conal's aim to provide just a single
> integral function that can handle both the recursive and regular cases?
>
> But, is this even possible?
>
> A nice example of this is David's "boingee" example: a ball on the screen
> gets dragged towards the current mouse position.
>
> Mathematically, this is
>
> vb(t) = s * ( pm(t) - pb(t) )
> pb(t) = pb0 + integral [0..t] vb(t)
>
> where
> pb(t) is the position of the ball at time t
> pb0 is the initial position of the ball at time t=0,
> pm(t) is the position of the mouse at time t
> s is some arbitrary scale factor
>
> Of course this is not really realistic but it is a simple example of
> recursive feedback: pb(t) depends on vb(t) and vice versa.
>
> Can we make such behaviors with Reactive?
>
>
>
>
> _______________________________________________
> Reactive mailing list
> Reactive at haskell.org
> http://www.haskell.org/mailman/listinfo/reactive
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://www.haskell.org/pipermail/reactive/attachments/20081202/72962d6b/attachment.htm
More information about the Reactive
mailing list