@@ -0,0 +1,436 @@
1+var List = function() {
3+ var throwError = function() { throw "Function expecting a list!"; }
7+ while (xs[0] === "Cons") {
13+ var reverse = foldl(function(x_72) {
14+ return function(y_73) {
15+ return["Cons", x_72, y_73]
18+ var concat = foldr(function(x_74) {
19+ return function(y_75) {
20+ return Value.append(x_74, y_75)
23+ var and = foldl(function(x_77) {
24+ return function(y_78) {
28+ var or = foldl(function(x_79) {
29+ return function(y_80) {
33+ var sum = foldl(function(x_89) {
34+ return function(y_90) {
38+ var product = foldl(function(x_91) {
39+ return function(y_92) {
43+ var maximum = foldl1(function(x) { return function(y) { return Math.max(x,y) } });
44+ var minimum = foldl1(function(x) { return function(y) { return Math.min(x,y) } });
46+ if (v[0] !== "Cons") {
47+ throw "Error: 'head' only accepts lists of length greater than one.";
52+ if (v[0] !== "Cons") {
53+ throw "Error: 'tail' only accepts lists of length greater than one.";
58+ return function(xs) {
59+ if (xs[0] === "Nil") { return xs; }
60+ if (xs[0] !== "Cons") { throwError(); }
61+ var root = ["Cons", f(xs[1]), ["Nil"]];
64+ while (xs[0]==="Cons") {
65+ curr[2] = ["Cons", f(xs[1]), ["Nil"]];
74+ return function(xs) {
76+ if (xs[0] === "Nil") { return acc; }
77+ if (xs[0] !== "Cons") { throwError(); }
78+ while (xs[0] === "Cons") {
88+ return function(xs) {
90+ if (xs[0] === "Nil") { return acc; }
91+ if (xs[0] !== "Cons") { throwError(); }
93+ while (xs[0] === "Cons") {
97+ for (var i = arr.length; i--; ) {
98+ acc = f(arr[i])(acc);
104+ function foldl1(f_49) {
105+ return function(_temp_50) {
106+ return function(v) {
107+ if("Cons" !== v[0]) {
112+ return foldl(f_49)(x_51)(xs_52)
117+ function foldr1(f_53) {
118+ return function(_temp_54) {
119+ return function(v) {
120+ if("Cons" !== v[0]) {
125+ return foldr(f_53)(x_55)(xs_56)
131+ return function(b) {
132+ return function(xs) {
133+ if (xs[0] === "Nil") { return ["Cons",b,["Nil"]]; }
134+ if (xs[0] !== "Cons") { throwError(); }
136+ while (xs[0] === "Cons") {
142+ for (var i = arr.length; i--; ) {
143+ out = ["Cons", arr[i], out];
149+ function scanl1(f) {
150+ return function(xs) {
151+ if (xs[0] !== "Cons") {
152+ throw "Error: 'scanl1' requires a list of at least length 1.";
154+ return scanl(f)(xs[1])(xs[2]);
157+ function filter(pred) {
158+ return function(xs) {
159+ if (xs[0] === "Nil") { return xs; }
160+ if (xs[0] !== "Cons") { throwError(); }
162+ while (xs[0] === "Cons") {
163+ if (pred(xs[1])) { arr.push(xs[1]); }
167+ for (var i = arr.length; i--; ) {
168+ out = ["Cons", arr[i], out];
173+ function concatMap(f_76) {
174+ return function(x) {
175+ return concat(map(f_76)(x))
178+ function forall(pred) {
179+ return foldl(function(x) { return function(acc) {
180+ return acc && pred(x);
183+ function exists(pred) {
184+ return foldl(function(x) { return function(acc) {
185+ return acc || pred(x);
188+ function partition(pred_93) {
189+ return function(lst_94) {
192+ var c = [function(v) {
193+ if("Nil" !== v[0]) {
196+ return["Tuple2", ["Nil"], ["Nil"]]
199+ if("Cons" !== v[0]) {
204+ return function(v) {
205+ if("Tuple2" !== v[0]) {
210+ return pred_93(x_95) ? ["Tuple2", ["Cons", x_95, as_97], bs_98] : ["Tuple2", as_97, ["Cons", x_95, bs_98]]
212+ }(partition(pred_93)(xs_96))
215+ for(var i = c.length;i--;) {
217+ if(r !== undefined) {
224+ function zipWith(f) {
225+ return function(listA) {
226+ return function(listB) {
227+ if (listA[0] === "Nil" || listB[0] === "Nil") { return listA; }
228+ if (listA[0] !== "Cons" || listB[0] !== "Cons") { throwError(); }
230+ while (listA[0] === "Cons" && listB[0] === "Cons") {
231+ arr.push(f(listA[1])(listB[1]));
236+ for (var i = arr.length; i--; ) {
237+ out = ["Cons", arr[i], out];
243+ function zip(listA) {
244+ return function(listB) {
245+ if (listA[0] === "Nil" || listB[0] === "Nil") { return listA; }
246+ if (listA[0] !== "Cons" || listB[0] !== "Cons") { throwError(); }
248+ while (listA[0] === "Cons" && listB[0] === "Cons") {
249+ arr.push(["Tuple2", listA[1], listB[1]]);
254+ for (var i = arr.length; i--; ) {
255+ out = ["Cons", arr[i], out];
260+ function unzip(pairs_112) {
263+ var c = [function(v) {
264+ if("Nil" !== v[0]) {
267+ return["Tuple2", ["Nil"], ["Nil"]]
270+ if("Cons" !== v[0]) {
275+ return function(v) {
276+ if("Tuple2" !== v[0]) {
279+ if("Tuple2" !== v[1][0]) {
282+ var x_115 = v[1][1];
283+ var y_116 = v[1][2];
284+ if("Tuple2" !== v[2][0]) {
287+ var xs_117 = v[2][1];
288+ var ys_118 = v[2][2];
289+ return["Tuple2", ["Cons", x_115, xs_117], ["Cons", y_116, ys_118]]
293+ }(["Tuple2", p_113, unzip(ps_114)])
296+ for(var i = c.length;i--;) {
298+ if(r !== undefined) {
304+ function intersperse(sep_119) {
305+ return function(xs_120) {
308+ var c = [function(v) {
309+ if("Nil" !== v[0]) {
315+ if("Cons" !== v[0]) {
319+ if("Nil" !== v[2][0]) {
322+ return["Cons", a_124, ["Nil"]]
326+ if("Cons" !== v[0]) {
330+ if("Cons" !== v[2][0]) {
333+ var b_122 = v[2][1];
334+ var cs_123 = v[2][2];
335+ return["Cons", a_121, ["Cons", sep_119, intersperse(sep_119)(["Cons", b_122, cs_123])]]
339+ for(var i = c.length;i--;) {
341+ if(r !== undefined) {
348+ function intercalate(sep_125) {
349+ return function(xs_126) {
352+ var c = [function(v) {
353+ if("Nil" !== v[0]) {
359+ if("Cons" !== v[0]) {
363+ if("Nil" !== v[2][0]) {
370+ if("Cons" !== v[0]) {
374+ if("Cons" !== v[2][0]) {
377+ var b_128 = v[2][1];
378+ var cs_129 = v[2][2];
379+ return Value.append(a_127, Value.append(sep_125, intercalate(sep_125)(["Cons", b_128, cs_129])))
383+ for(var i = c.length;i--;) {
385+ if(r !== undefined) {
393+ if (xs[0] === "Nil") { return xs; }
394+ if (xs[0] !== "Cons") { throwError(); }
396+ while (xs[0] === "Cons") {
400+ arr.sort(function(a,b) { return a - b});
402+ for (var i = arr.length; i--; ) {
403+ out = [ "Cons", arr[i], out ];
420+ concatMap:concatMap,
429+ partition:partition,
433+ intersperse:intersperse,
434+ intercalate:intercalate,