diff --git a/core-js/runtime/Signal.js b/core-js/runtime/Signal.js index d988308..31afd3b 100644 --- a/core-js/runtime/Signal.js +++ b/core-js/runtime/Signal.js @@ -132,11 +132,15 @@ Elm.Signal = function() { function delay(t) { return function(s) { var delayed = new input(s.value); + var firstEvent = true; function update(v) { - setTimeout(function() { Dispatcher.notify(delayed.id,v); },t*1000); + if (firstEvent) return; + setTimeout(function() { Dispatcher.notify(delayed.id,v); },t); } function first(a) { return function(b) { return a; }; } - return new lift(first, [delayed, new lift(update,[s])]); + var out = new sampleOn(delayed,new lift(first, [delayed, new lift(update,[s])])); + firstEvent = false; + return out; }; } @@ -173,16 +177,56 @@ Elm.Signal = function() { s2.kids.push(this); }; + function average(sampleSize) { return function(s) { + var sample = new Array(sampleSize); + var i = sampleSize; + while (i--) sample[i] = 0; + i = 0; + var full = false; + var total = 0; + function f(n) { + total += n - sample[i]; + sample[i] = n; + var avg = total / Math.max(1, full ? sampleSize : i); + if (++i == sampleSize) { full = true; i = 0; } + return avg; + } + return new lift(f, [s]); + }; + } + return { constant : function(v) { return new input(v); }, lift : function(f){return function(e){return new lift(f,[e]);};}, - lift2 : function(f) { return function(e1) { return function(e2) { - return new lift(f, [e1,e2]); }; }; }, - lift3 : function(f) { return function(e1) { return function(e2) { - return function(e3){return new lift(f,[e1,e2,e3]);};};};}, - lift4 : function(f) { return function(e1) { return function(e2) { - return function(e3) { return function(e4) { - return new lift(f, [e1,e2,e3,e4]); }; }; }; }; }, + lift2 : function(f) { + return function(e1) { return function(e2) { + return new lift(f, [e1,e2]); };};}, + lift3 : function(f) { + return function(e1) { return function(e2) { + return function(e3){return new lift(f,[e1,e2,e3]);};};};}, + lift4 : function(f) { + return function(e1) { return function(e2) { + return function(e3) { return function(e4) { + return new lift(f, [e1,e2,e3,e4]);};};};};}, + lift5 : function(f) { + return function(e1) { return function(e2) { + return function(e3) { return function(e4) { + return function(e5) { + return new lift(f, [e1,e2,e3,e4,e5]);};};};};};}, + lift6 : function(f) { return function(e1) { return function(e2) { + return function(e3) { return function(e4) { + return function(e5) { return function(e6) { + return new lift(f, [e1,e2,e3,e4,e5,e6]); };};};};};};}, + lift7 : function(f) { return function(e1) { return function(e2) { + return function(e3) { return function(e4) { + return function(e5) { return function(e6) { + return function(e7) { + return new lift(f, [e1,e2,e3,e4,e5,e6,e7]);};};};};};};};}, + lift8 : function(f) { return function(e1) { return function(e2) { + return function(e3) { return function(e4) { + return function(e5) { return function(e6) { + return function(e7) { return function(e8) { + return new lift(f, [e1,e2,e3,e4,e5,e6,e7,e8]);};};};};};};};};}, foldp : function(f) { return function(b) { return function(e) { return new fold(f,b,false,e); }; }; }, foldp_ : function(f) { return function(b) { return function(e) { @@ -191,6 +235,7 @@ Elm.Signal = function() { return new fold(f,function(x){return x;},true,e); }; }, delay : delay, merge : function(s1) { return function(s2) { return new merge(s1,s2)}; }, + average : average, count : function(sig) { var incr = function(_){return function(c){return c+1;};}; return new fold(incr,0,false,sig) },