on master help sign in
Update .js files for Foreign.JavaScript and new Signal operators.
9332a8aevancz
core-js/Data.js+83−2
@@ -23,7 +23,7 @@ var Maybe = function() {
23 };
23 };
24 }
24 }
25 function mapCons(f) { return function(y) { return function(xs) {
25 function mapCons(f) { return function(y) { return function(xs) {
26− var x = f(x);
26+ var x = f(y);
27 if (x[0] === "Just") return ["Cons", x[1], xs];
27 if (x[0] === "Just") return ["Cons", x[1], xs];
28 return xs;
28 return xs;
29 };
29 };
@@ -48,7 +48,88 @@ var Maybe = function() {
48 };
48 };
49}();
49}();
50
50
51+var String = function() {
52+
53+ function append(s1) { return function(s2) {
54+ return s1.concat(s2);
55+ };
56+ }
57+ function map(f) { return function(s) {
58+ for (var i = s.length; i--; ) { s[i] = f(s[i]); }
59+ };
60+ }
61+
62+ function intercalate(sep) { return function(ss) {
63+ return Value.listToArray(ss).join(sep);
64+ };
65+ }
66+ function intersperse(sep) { return function(s) {
67+ return s.split("").join(sep);
68+ };
69+ }
70+
71+ function foldl(f) { return function(b) { return function(s) {
72+ var acc = b;
73+ for (var i = 0, len = s.length; i < len; ++i) { acc = f(s[i])(acc); }
74+ return acc;
75+ };
76+ };
77+ }
78+ function foldr(f) { return function(b) { return function(s) {
79+ var acc = b;
80+ for (var i = s.length; i--; ) { acc = f(s[i])(acc); }
81+ return acc;
82+ };
83+ };
84+ }
85+
86+ function concatMap(f) { return function(s) {
87+ var a = s.split("");
88+ for (var i = a.length; i--; ) { a[i] = f(a[i]); }
89+ return a.join("");
90+ };
91+ }
92+
93+ function forall(pred) { return function(s) {
94+ for (var i = s.length; i--; ) { if (!pred(s[i])) {return false}; }
95+ return true;
96+ };
97+ }
98+ function exists(pred) { return function(s) {
99+ for (var i = s.length; i--; ) { if (pred(s[i])) {return true}; }
100+ return false;
101+ };
102+ }
103+
104+ return {cons : append,
105+ snoc : append,
106+ head : function(s) { return s[0]; },
107+ last : function(s) { return s[s.length-1]; },
108+ tail : function(s) { return s.slice(1); },
109+ length : function(s) { return s.length; },
110+ map : map,
111+ intercalate : intercalate,
112+ intersperse : intersperse,
113+ reverse : function(s) { return s.split("").reverse().join(""); },
114+ toLower : function(s) { return s.toLowerCase(); },
115+ toUpper : function(s) { return s.toUpperCase(); },
116+ foldl : foldl,
117+ foldr : foldr,
118+ concat : function(ss) { return Value.listToArray(ss).join(""); },
119+ concatMap : concatMap,
120+ forall : forall,
121+ exists : exists,
122+ /*
123+ filter : filter,
124+ take:,
125+ drop:,
126+ */
127+ toText : Value.toText,
51−return {String: { toText : Value.toText , properEscape : Value.properEscape } ,
128+ properEscape : Value.properEscape
129+ };
130+}();
131+
132+return {String: {toText:Value.toText, properEscape:Value.properEscape},
52 Char:Char,
133 Char:Char,
53 Maybe:Maybe,
134 Maybe:Maybe,
54 List:List
135 List:List
core-js/Everything.js+2−11
@@ -1,15 +1,5 @@
1
1
2−var eq = function(x,y) {
2+var eq = Value.eq;
3− if (typeof x === "object") {
4− if (x === y) return true;
5− if (x.length !== y.length) return false;
6− for (var i = x.length; i--; ) {
7− if (!eq(x[i],y[i])) return false;
8− }
9− return true;
10− }
11− return x === y;
12−};
13
3
14var includeGlobal = this;
4var includeGlobal = this;
15(function() {
5(function() {
@@ -60,4 +50,5 @@ var ElmCode = {};
60ElmCode.Data = Data;
50ElmCode.Data = Data;
61ElmCode.Signal = Signal;
51ElmCode.Signal = Signal;
62ElmCode.Data.List = List;
52ElmCode.Data.List = List;
53+ElmCode.Foreign = Foreign;
63ElmCode.Prelude = Prelude;
54ElmCode.Prelude = Prelude;
core-js/Prelude.js+7−1
@@ -80,6 +80,12 @@ var Prelude = function() {
80 lift3 : Signal.lift3,
80 lift3 : Signal.lift3,
81 lift4 : Signal.lift4,
81 lift4 : Signal.lift4,
82 foldp : Signal.foldp,
82 foldp : Signal.foldp,
83− constant : Signal.constant
83+ constant : Signal.constant,
84+ count : Signal.count,
85+ keepIf : Signal.keepIf,
86+ dropIf : Signal.dropIf,
87+ keepWhen : Signal.keepWhen,
88+ dropWhen : Signal.dropWhen,
89+ dropRepeats : Signal.dropRepeats
84 };
90 };
85}();
91}();
core-js/Value.js+34−1
@@ -1,5 +1,18 @@
1
1
2var Value = function(){
2var Value = function(){
3+
4+ var eq = function(x,y) {
5+ if (typeof x === "object") {
6+ if (x === y) return true;
7+ if (x.length !== y.length) return false;
8+ for (var i = x.length; i--; ) {
9+ if (!eq(x[i],y[i])) return false;
10+ }
11+ return true;
12+ }
13+ return x === y;
14+ };
15+
3 var Tuple = function() {
16 var Tuple = function() {
4 var len = arguments.length;
17 var len = arguments.length;
5 var arr = new Array(len+1);
18 var arr = new Array(len+1);
@@ -10,6 +23,15 @@ var Value = function(){
10 return arr;
23 return arr;
11 };
24 };
12
25
26+ var listToArray = function(list) {
27+ var arr = [];
28+ while (list[0] === "Cons") {
29+ arr.push(list[1]);
30+ list = list[2];
31+ }
32+ return arr;
33+ };
34+
13 var properEscape = function(str) {
35 var properEscape = function(str) {
14 str.replace('"', "&#34;");
36 str.replace('"', "&#34;");
15 str.replace("&", "&#38;");
37 str.replace("&", "&#38;");
@@ -90,10 +112,21 @@ var Value = function(){
90 curr[2] = ys;
112 curr[2] = ys;
91 return root;
113 return root;
92 };
114 };
115+
116+ var str = function(s) {
117+ var out = ["Nil"];
118+ for (var i = s.length; i--; ) {
119+ out = ["Cons", s[i], out];
120+ }
121+ return out;
122+ };
93
123
124+ return {eq:eq,
125+ str:str,
94− return {show:show,
126+ show:show,
95 Tuple:Tuple,
127 Tuple:Tuple,
96 append:append,
128 append:append,
129+ listToArray:listToArray,
97 toText : toText,
130 toText : toText,
98 properEscape : properEscape};
131 properEscape : properEscape};
99}();
132}();
core-js/cat-js.sh+1−1
@@ -1 +1 @@
1−cat Guid.js Value.js List.js Data.js collage/Color.js Element.js Text.js collage/Shape.js collage/Line.js runtime/Dispatcher.js runtime/Signal.js Prelude.js Everything.js > ../elm-mini.js ; ls
1+cat Guid.js foreign/JavaScript.js Value.js List.js Data.js collage/Color.js Element.js Text.js collage/Shape.js collage/Line.js runtime/Dispatcher.js runtime/Signal.js Prelude.js Everything.js > ../elm-mini.js ; ls
core-js/foreign/JavaScript.js+13−2
@@ -29,12 +29,15 @@ var Foreign = function() {
29 return a;
29 return a;
30 }
30 }
31
31
32− var castJSStringToString = castJSArrayToList
32+ var castJSStringToString = castJSArrayToList;
33 function castStringToJSString(str) {
33 function castStringToJSString(str) {
34 if (typeof str === "string") return str;
34 if (typeof str === "string") return str;
35 return castListToJSArray(str).join('');
35 return castListToJSArray(str).join('');
36 }
36 }
37
37
38+ function fromTuple(t) { return t.slice(1); }
39+ function toTuple(a) { return a.unshift("Tuple" + a.length); }
40+
38 return {castJSBoolToBool:castJSBoolToBool,
41 return {castJSBoolToBool:castJSBoolToBool,
39 castBoolToJSBool:castBoolToJSBool,
42 castBoolToJSBool:castBoolToJSBool,
40 castJSNumberToFloat:castJSNumberToFloat,
43 castJSNumberToFloat:castJSNumberToFloat,
@@ -46,7 +49,15 @@ var Foreign = function() {
46 castJSArrayToList:castJSArrayToList,
49 castJSArrayToList:castJSArrayToList,
47 castListToJSArray:castListToJSArray,
50 castListToJSArray:castListToJSArray,
48 castJSStringToString:castJSStringToString,
51 castJSStringToString:castJSStringToString,
49− castStringToJSString:castStringToJSString
52+ castStringToJSString:castStringToJSString,
53+ castTupleToJSTuple2:fromTuple,
54+ castTupleToJSTuple3:fromTuple,
55+ castTupleToJSTuple4:fromTuple,
56+ castTupleToJSTuple5:fromTuple,
57+ castJSTupleToTuple2:toTuple,
58+ castJSTupleToTuple3:toTuple,
59+ castJSTupleToTuple4:toTuple,
60+ castJSTupleToTuple5:toTuple
50 };
61 };
51 }();
62 }();
52 return {JavaScript:JavaScript};
63 return {JavaScript:JavaScript};
core-js/runtime/Dispatcher.js+39−3
@@ -59,9 +59,46 @@ var Elm = function() {
59 };
59 };
60 input.kids.push(this);
60 input.kids.push(this);
61 };
61 };
62+
63+ var dropIf = function(pred,base,input) {
64+ this.id = Guid.guid();
65+ this.value = pred(input.value) ? base : input.value;
66+ this.kids = [];
67+ this.recv = function(timestep, changed) {
68+ var chng = changed && !pred(input.value);
69+ if (chng) { this.value = input.value; }
70+ send(this.kids, timestep, chng);
71+ };
72+ input.kids.push(this);
73+ };
74+ var dropRepeats = function(input) {
75+ this.id = Guid.guid();
76+ this.value = input.value;
77+ this.kids = [];
78+ this.recv = function(timestep, changed) {
79+ var chng = changed && !eq(this.value,input.value);
80+ if (chng) { this.value = input.value; }
81+ send(this.kids, timestep, chng);
82+ };
83+ input.kids.push(this);
84+ };
85+
86+ var dropWhen = function(s1) { return function(b) { return function(s2) {
87+ var pairs = new lift(function(x){return function(y){return [x,y];};},[s1,s2]);
88+ var dropped = new dropIf(function(p){return p[0];},[true,b],pairs);
89+ return new lift(function(p){return p[1];},[dropped]); }; };
90+ };
91+
62 return {Input: function(x) {return new input(x);},
92 return {Input: function(x) {return new input(x);},
63 Lift: function(f,xs){return new lift(f,xs);},
93 Lift: function(f,xs){return new lift(f,xs);},
64− Fold: function(f,b,x){return new fold(f,b,x);}
94+ Fold: function(f,b,x){return new fold(f,b,x);},
95+ keepIf : function(pred) { return function(base) { return function(sig) {
96+ return new dropIf(function(x) { return !pred(x)},base,sig); }; }; },
97+ dropIf : function(pred) { return function(base) { return function(sig) {
98+ return new dropIf(pred,base,sig); }; }; },
99+ keepWhen : function(s) { return dropWhen(new lift(function(b){return !b;},[s])); },
100+ dropWhen : dropWhen,
101+ dropRepeats : function(s) { return new dropRepeats(s);}
65 };
102 };
66}();
103}();
67
104
@@ -109,8 +146,7 @@ var Dispatcher = function() {
109 };
146 };
110
147
111 var initialize = function() {
148 var initialize = function() {
112− var prog = ElmCode.hasOwnProperty("main") ? ElmCode.main : main;
149+ program = ElmCode.main();
113− try { program = prog(); } catch (e) { throw e; }
114 if (!program.hasOwnProperty('recv')) {
150 if (!program.hasOwnProperty('recv')) {
115 program = Elm.Input(program);
151 program = Elm.Input(program);
116 }
152 }
core-js/runtime/Signal.js+7−1
@@ -301,6 +301,12 @@ var Signal = function() {
301 return function(e3) { return function(e4) {
301 return function(e3) { return function(e4) {
302 return Elm.Lift(f, [e1,e2,e3,e4]); }; }; }; }; },
302 return Elm.Lift(f, [e1,e2,e3,e4]); }; }; }; }; },
303 foldp : function(f) { return function(b) { return function(e) {
303 foldp : function(f) { return function(b) { return function(e) {
304− return Elm.Fold(f,b,e); }; }; }
304+ return Elm.Fold(f,b,e); }; }; },
305+ count : function(sig){return Elm.fold(function(c){return c+1},0,sig)},
306+ keepIf : Elm.keepIf,
307+ dropIf : Elm.dropIf,
308+ keepWhen : Elm.keepWhen,
309+ dropWhen : Elm.dropWhen,
310+ dropRepeats : Elm.dropRepeats
305 };
311 };
306}();
312}();