[Haskell-beginners] netwire accum delayed by one
nathan.huesken at posteo.de
Sat Nov 3 20:02:49 CET 2012
On 11/03/2012 03:09 PM, Ertugrul Söylemez wrote:
> Nathan Hüsken <nathan.huesken at posteo.de> 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
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.
More information about the Beginners