@@ -2386,6 +2386,21 @@ Elm.Signal = function() {
2386 return new lift(function(p){return p[1];},[dropped]); }; };
2386 return new lift(function(p){return p[1];},[dropped]); }; };
2392+ function timeIndex(pair,s) {
2393+ this.id = Guid.guid();
2394+ var t = (new window.Date).getTime();
2395+ this.value = pair ? Value.Tuple(t,s.value) : t;
2397+ this.recv = function(timestep, changed, parentID) {
2398+ if (changed) this.value = pair ? Value.Tuple(timestep, s.value) : timestep;
2399+ send(this, timestep, changed);
2390 * @constructor
2405 * @constructor
@@ -2529,12 +2544,13 @@ Elm.Signal = function() {
2529 keepWhen : function(s) { return dropWhen(new lift(function(b){return !b;},[s])); },
2544 keepWhen : function(s) { return dropWhen(new lift(function(b){return !b;},[s])); },
2530 dropWhen : dropWhen,
2545 dropWhen : dropWhen,
2531 dropRepeats : function(s) { return new dropRepeats(s);},
2546 dropRepeats : function(s) { return new dropRepeats(s);},
2532− sampleOn : function(s1){return function(s2){return new sampleOn(s1,s2);};}
2547+ sampleOn : function(s1){return function(s2){return new sampleOn(s1,s2);};},
2548+ timestamp : function(s) { return new timeIndex(true, s); },
2549+ timeOf : function(s) { return new timeIndex(false, s); }
2535var Dispatcher = function() {
2552var Dispatcher = function() {
2536 var program = null;
2553 var program = null;
2538 var inputs = [];
2554 var inputs = [];
2539 var currentElement = null;
2555 var currentElement = null;
@@ -2561,7 +2577,7 @@ var Dispatcher = function() {
2561 })(program);
2577 })(program);
2563 var notify = function(id, v) {
2579 var notify = function(id, v) {
2564− timestep += 1;
2580+ var timestep = (new window.Date).getTime();
2565 var hasListener = false;
2581 var hasListener = false;
2566 for (var i = inputs.length; i--; ) {
2582 for (var i = inputs.length; i--; ) {
2567 hasListener = inputs[i].recv(timestep, id, v) || hasListener;
2583 hasListener = inputs[i].recv(timestep, id, v) || hasListener;
@@ -3154,7 +3170,9 @@ Elm.Prelude = function() {
3154 keepWhen : Elm.Signal.keepWhen,
3170 keepWhen : Elm.Signal.keepWhen,
3155 dropWhen : Elm.Signal.dropWhen,
3171 dropWhen : Elm.Signal.dropWhen,
3156 dropRepeats : Elm.Signal.dropRepeats,
3172 dropRepeats : Elm.Signal.dropRepeats,
3157− sampleOn : Elm.Signal.sampleOn
3173+ sampleOn : Elm.Signal.sampleOn,
3174+ timestamp : Elm.Signal.timestamp,
3175+ timeOf : Elm.Signal.timeOf