[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