
On 11/03/2012 03:09 PM, Ertugrul Söylemez wrote:
Nathan Hüsken
wrote: With this netwire based program:
mainWire = proc _ -> do accum (+) 0 -< 1
[...]
I get (output):
Right 0.0 Right 1.0 Right 2.0 ...
Should the output not start with 1.0 (and not 0.0)? The accum should be applied already in the first invocation, should it not?
Accum is documented to behave like a left scan, which also starts with the initial value. The reason is that for most applications you want the data dependency on the previous instant instead of on the current. Many useful FRP constructs can be (and are) expressed in terms of accum and accumT.
While I understand the intention, I often have several accums (or integral which is expressed in terms of accum) chained. For example: speed :: WireP CollisionData Vector speed = accum collide initSpeed where collide = ... position :: WireP CollisionData Vector position = integral_ initPos . speed which delays the output by 2. Maybe there should also be a "non delaying" version of accum and integral? I must admit, I would prefer it to inset delay manually, but that probably just a matter of taste. Reagards, Nathan