[Haskell-beginners] netwire accum delayed by one
Nathan Hüsken
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
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
More information about the Beginners
mailing list