Oops.  The list&#39;s spam-filter tossed this note.<br><div class="gmail_quote"><br><div class="gmail_quote"><div class="im">---------- Forwarded message ----------<br>From: Alexander Foremny &lt;<a href="mailto:alexanderforemny@googlemail.com" target="_blank">alexanderforemny@googlemail.com</a>&gt;<br>


To: <a href="mailto:reactive@haskell.org" target="_blank">reactive@haskell.org</a><br></div><div><div></div><div class="h5">Date: Tue, 24 Aug 2010 10:14:11 +0200<br>Subject: whenE uses much memory<br>Hello,<br>
<br>
I am trying to write a simple 2D tower defense game using reactive and<br>
reactive-glut. I am spawning a wave of creeps that walk around the map<br>
and when there are no creeps on the map, I&#39;d like to spawn the next<br>
wave. However, I cannot predict at which time there will be no creeps<br>
on the maps since each creature might move with different speed. To<br>
realize switching anyway I thought I could poll the number of creeps<br>
and switch when the number is zero. With that solution I am having<br>
serious performance problems. Here&#39;s the relevant code:<br>
<br>
&gt; data World = World { ... }<br>
&gt;<br>
&gt; wave1 :: Behavior World<br>
&gt;<br>
&gt; wave2 :: Behavior World<br>
&gt;<br>
&gt; worldB = wave1 `switcher` fmap (const wave2) (whenE (zeroCreeps wave1) pollE)<br>
&gt;     where pollE = atTimes [1..]<br>
&gt;<br>
&gt; zeroCreeps :: Behavior World -&gt; Behavior Bool<br>
<br>
When running worldB from main I can see the program&#39;s memory usage<br>
increasing and everything becomes very unresponsive. It seems as if<br>
whenE is accumalating all the occurences of the event. The problem<br>
seems to boil down to snapshot having the same behavior.<br>
<br>
&gt; snapshot (pure False) (atTimes [1..])<br>
<br>
This piece of code uses very much memory either. Is this due to<br>
reactive being broken (I read that somewhere) or is my solution just<br>
no solution at all?<br>
<br>
I am using ghc 6.12.1 with reactive 0.11.5 and reactive-glut 0.1.9.<br>
<br>
Regards<br>
Alexander Foremny<br>
<br></div></div></div><br>
</div><br>