on master help sign in
Merge pull request #29 from joeyadams/foldp1

Add variant of foldp whose initial value comes from the source signal

commite2f7aca147bac2941b432ba3d0b7d763a60c7e9e authorEvan Czaplicki <info@elm-lang.org> dateSat 29 Sep 2012, 14:57 (14 years ago) parentc2300be0dee686
4 files changed+9−4
core-js/Prelude.js+1 core-js/runtime/Dispatcher.js+4−3 core-js/runtime/Signal.js+2 elm/src/Types/Hints.hs+2−1
core-js/Prelude.js+1
@@ -94,6 +94,7 @@ var Prelude = function() {
9494 lift3 : Signal.lift3,
9595 lift4 : Signal.lift4,
9696 foldp : Signal.foldp,
97+ foldp1 : Signal.foldp1,
9798 constant : Signal.constant,
9899 count : Signal.count,
99100 keepIf : Signal.keepIf,
core-js/runtime/Dispatcher.js+4−3
@@ -50,9 +50,9 @@ var Elm = function() {
5050 args[i].kids.push(this);
5151 }
5252 };
53− var fold = function(func,base,input) {
53+ var fold = function(func,base,baseIsFunc,input) {
5454 this.id = Guid.guid();
55− this.value = base;
55+ this.value = baseIsFunc ? base(input.value) : base;
5656 this.kids = [];
5757 this.recv = function(timestep, changed, parentID) {
5858 if (changed) { this.value = func(input.value)(this.value); }
@@ -113,7 +113,8 @@ var Elm = function() {
113113
114114 return {Input: function(x) {return new input(x);},
115115 Lift: function(f,xs){return new lift(f,xs);},
116− Fold: function(f,b,x){return new fold(f,b,x);},
116+ Fold: function(f,b,x){return new fold(f,b,false,x);},
117+ Fold1: function(f,b,x){return new fold(f,b,true,x);},
117118 keepIf : function(pred) { return function(base) { return function(sig) {
118119 return new dropIf(function(x) { return !pred(x)},base,sig); }; }; },
119120 dropIf : function(pred) { return function(base) { return function(sig) {
core-js/runtime/Signal.js+2
@@ -347,6 +347,8 @@ var Signal = function() {
347347 return Elm.Lift(f, [e1,e2,e3,e4]); }; }; }; }; },
348348 foldp : function(f) { return function(b) { return function(e) {
349349 return Elm.Fold(f,b,e); }; }; },
350+ foldp1 : function(f) { return function(b) { return function(e) {
351+ return Elm.Fold1(f,b,e); }; }; },
350352 count : function(sig){return Elm.Fold(function(_){return function(c){return c+1;};},0,sig)},
351353 keepIf : Elm.keepIf,
352354 dropIf : Elm.dropIf,
elm/src/Types/Hints.hs+2−1
@@ -131,7 +131,8 @@ signals =
131131 , sig 3 "lift2"
132132 , sig 4 "lift3"
133133 , sig 5 "lift4"
134− , "foldp" -:: (a ==> b ==> b) ==> b ==> signalOf a ==> signalOf b
134+ , "foldp" -:: (a ==> b ==> b) ==> b ==> signalOf a ==> signalOf b
135+ , "foldp1" -:: (a ==> b ==> b) ==> (a ==> b) ==> signalOf a ==> signalOf b
135136 , "randomize" -:: int ==> int ==> signalOf a ==> signalOf int
136137 , "count" -:: signalOf a ==> signalOf int
137138 , "keepIf" -:: (a==>bool) ==> a ==> signalOf a ==> signalOf a