on master help sign in
Add `average` function and ensure that `delay` does not propagate the default value.
8d7df3devancz
core-js/runtime/Signal.js+54−9
@@ -132,11 +132,15 @@ Elm.Signal = function() {
132
132
133 function delay(t) { return function(s) {
133 function delay(t) { return function(s) {
134 var delayed = new input(s.value);
134 var delayed = new input(s.value);
135+ var firstEvent = true;
135 function update(v) {
136 function update(v) {
137+ if (firstEvent) return;
136− setTimeout(function() { Dispatcher.notify(delayed.id,v); },t*1000);
138+ setTimeout(function() { Dispatcher.notify(delayed.id,v); },t);
137 }
139 }
138 function first(a) { return function(b) { return a; }; }
140 function first(a) { return function(b) { return a; }; }
139− return new lift(first, [delayed, new lift(update,[s])]);
141+ var out = new sampleOn(delayed,new lift(first, [delayed, new lift(update,[s])]));
142+ firstEvent = false;
143+ return out;
140 };
144 };
141 }
145 }
142
146
@@ -173,16 +177,56 @@ Elm.Signal = function() {
173 s2.kids.push(this);
177 s2.kids.push(this);
174 };
178 };
175
179
180+ function average(sampleSize) { return function(s) {
181+ var sample = new Array(sampleSize);
182+ var i = sampleSize;
183+ while (i--) sample[i] = 0;
184+ i = 0;
185+ var full = false;
186+ var total = 0;
187+ function f(n) {
188+ total += n - sample[i];
189+ sample[i] = n;
190+ var avg = total / Math.max(1, full ? sampleSize : i);
191+ if (++i == sampleSize) { full = true; i = 0; }
192+ return avg;
193+ }
194+ return new lift(f, [s]);
195+ };
196+ }
197+
176 return {
198 return {
177 constant : function(v) { return new input(v); },
199 constant : function(v) { return new input(v); },
178 lift : function(f){return function(e){return new lift(f,[e]);};},
200 lift : function(f){return function(e){return new lift(f,[e]);};},
201+ lift2 : function(f) {
179− lift2 : function(f) { return function(e1) { return function(e2) {
202+ return function(e1) { return function(e2) {
180− return new lift(f, [e1,e2]); }; }; },
203+ return new lift(f, [e1,e2]); };};},
204+ lift3 : function(f) {
181− lift3 : function(f) { return function(e1) { return function(e2) {
205+ return function(e1) { return function(e2) {
182− return function(e3){return new lift(f,[e1,e2,e3]);};};};},
206+ return function(e3){return new lift(f,[e1,e2,e3]);};};};},
207+ lift4 : function(f) {
208+ return function(e1) { return function(e2) {
209+ return function(e3) { return function(e4) {
210+ return new lift(f, [e1,e2,e3,e4]);};};};};},
211+ lift5 : function(f) {
183− lift4 : function(f) { return function(e1) { return function(e2) {
212+ return function(e1) { return function(e2) {
184− return function(e3) { return function(e4) {
213+ return function(e3) { return function(e4) {
214+ return function(e5) {
185− return new lift(f, [e1,e2,e3,e4]); }; }; }; }; },
215+ return new lift(f, [e1,e2,e3,e4,e5]);};};};};};},
216+ lift6 : function(f) { return function(e1) { return function(e2) {
217+ return function(e3) { return function(e4) {
218+ return function(e5) { return function(e6) {
219+ return new lift(f, [e1,e2,e3,e4,e5,e6]); };};};};};};},
220+ lift7 : function(f) { return function(e1) { return function(e2) {
221+ return function(e3) { return function(e4) {
222+ return function(e5) { return function(e6) {
223+ return function(e7) {
224+ return new lift(f, [e1,e2,e3,e4,e5,e6,e7]);};};};};};};};},
225+ lift8 : function(f) { return function(e1) { return function(e2) {
226+ return function(e3) { return function(e4) {
227+ return function(e5) { return function(e6) {
228+ return function(e7) { return function(e8) {
229+ return new lift(f, [e1,e2,e3,e4,e5,e6,e7,e8]);};};};};};};};};},
186 foldp : function(f) { return function(b) { return function(e) {
230 foldp : function(f) { return function(b) { return function(e) {
187 return new fold(f,b,false,e); }; }; },
231 return new fold(f,b,false,e); }; }; },
188 foldp_ : function(f) { return function(b) { return function(e) {
232 foldp_ : function(f) { return function(b) { return function(e) {
@@ -191,6 +235,7 @@ Elm.Signal = function() {
191 return new fold(f,function(x){return x;},true,e); }; },
235 return new fold(f,function(x){return x;},true,e); }; },
192 delay : delay,
236 delay : delay,
193 merge : function(s1) { return function(s2) { return new merge(s1,s2)}; },
237 merge : function(s1) { return function(s2) { return new merge(s1,s2)}; },
238+ average : average,
194 count : function(sig) {
239 count : function(sig) {
195 var incr = function(_){return function(c){return c+1;};};
240 var incr = function(_){return function(c){return c+1;};};
196 return new fold(incr,0,false,sig) },
241 return new fold(incr,0,false,sig) },