@@ -1,5 +1,7 @@
11 /**
22 module Native.List where
3+
4+import Native.Function
35 **/
46
57(function() {
@@ -65,79 +67,68 @@
6567 return out;
6668 }
6769
68− function map(f) { return function(xs) {
70+ function map(f, xs) {
6971 var arr = [];
7072 while (xs.ctor === "Cons") {
7173 arr.push(f(xs._0));
7274 xs = xs._1;
7375 }
7476 return fromArray(arr);
75− }
7677 }
7778
78− function foldl(f) { return function(b) { return function(xs) {
79− var acc = b;
80− while (xs.ctor === "Cons") {
81− acc = f(xs._0)(acc);
82− xs = xs._1;
83− }
84− return acc;
79+ function foldl(f, b, xs) {
80+ var acc = b;
81+ while (xs.ctor === "Cons") {
82+ acc = f(xs._0)(acc);
83+ xs = xs._1;
8584 }
86− }
85+ return acc;
8786 }
8887
89− function foldr(f) { return function(b) { return function(xs) {
90− var arr = toArray(xs);
91− var acc = b;
92− for (var i = arr.length; i--; ) {
93− acc = f(arr[i])(acc);
94− }
95− return acc;
88+ function foldr(f, b, xs) {
89+ var arr = toArray(xs);
90+ var acc = b;
91+ for (var i = arr.length; i--; ) {
92+ acc = f(arr[i])(acc);
9693 }
97− }
94+ return acc;
9895 }
9996
100− function foldl1(f) { return function(xs) {
101− xs.ctor === "Nil" ? throwError('foldl1') : return foldl(f)(xs._0)(xs._1);
102− }
97+ function foldl1(f, xs) {
98+ xs.ctor === "Nil" ? throwError('foldl1') : return foldl(f, xs._0, xs._1);
10399 }
104100
105− function foldr1(f) { return function(xs) {
101+ function foldr1(f, xs) {
106102 if (xs.ctor === "Nil") { throwError('foldr1'); }
107103 var arr = toArray(xs);
108104 var acc = arr.pop();
109105 for (var i = arr.length; i--; ) {
110− acc = f(arr[i])(acc);
106+ acc = A2(f, arr[i], acc);
111107 }
112108 return acc;
113− }
114109 }
115110
116− function scanl(f) { return function(b) { return function(xs) {
117− var arr = toArray(xs);
118− arr.unshift(b);
119− var len = arr.length;
120− for (var i = 1; i < len; ++i) {
121− arr[i] = f(arr[i])(arr[i-1]);
122− }
123− return fromArray(arr);
111+ function scanl(f, b, xs) {
112+ var arr = toArray(xs);
113+ arr.unshift(b);
114+ var len = arr.length;
115+ for (var i = 1; i < len; ++i) {
116+ arr[i] = A2(f, arr[i], arr[i-1]);
124117 }
125− }
118+ return fromArray(arr);
126119 }
127120
128− function scanl1(f) { return function(xs) {
129− xs.ctor === "Nil" ? throwError('scanl1') : return scanl(f)(xs._0)(xs._1);
130− }
121+ function scanl1(f, xs) {
122+ xs.ctor === "Nil" ? throwError('scanl1') : return scanl(f, xs._0, xs._1);
131123 }
132124
133− function filter(pred) { return function(xs) {
125+ function filter(pred, xs) {
134126 var arr = [];
135127 while (xs.ctor === "Cons") {
136128 if (pred(xs._0)) { arr.push(xs._0); }
137129 xs = xs._1;
138130 }
139131 return fromArray(arr);
140− }
141132 }
142133
143134 function length(xs) {
@@ -151,52 +142,47 @@
151142
152143 function reverse(xs) { return fromArray(toArray(xs).reverse()); }
153144
154− function all(pred) { return function(xs) {
145+ function all(pred, xs) {
155146 while (xs.ctor === "Cons") {
156147 if (!pred(xs._0)) return false;
157148 xs = xs._1;
158149 }
159150 return true;
160− }
161151 }
162152
163− function any(pred) { return function(xs) {
153+ function any(pred, xs) {
164154 while (xs.ctor === "Cons") {
165155 if (pred(xs._0)) return true;
166156 xs = xs._1;
167157 }
168158 return false;
169− }
170159 }
171160
172− function zipWith(f) { return function(xs) { return function(ys) {
173− var arr = [];
174− while (xs.ctor === "Cons" && ys.ctor === "Cons") {
175− arr.push(f(xs._0)(ys._0));
176− xs = xs._1;
177− ys = ys._1;
178− }
179− return fromArray(arr);
161+ function zipWith(f, xs, ys) {
162+ var arr = [];
163+ while (xs.ctor === "Cons" && ys.ctor === "Cons") {
164+ arr.push(A2(f, xs._0, ys._0));
165+ xs = xs._1;
166+ ys = ys._1;
180167 }
181− }
168+ return fromArray(arr);
182169 }
183170
184− function zip(xs) { return function(ys) {
171+ function zip(xs, ys) {
185172 var arr = [];
186173 while (xs.ctor === "Cons" && ys.ctor === "Cons") {
187− arr.push(["Tuple2",xs._0,ys._0]);
174+ arr.push({ ctor:'Tuple2', _0:xs._0, _1:ys._0 });
188175 xs = xs._1;
189176 ys = ys._1;
190177 }
191178 return fromArray(arr);
192− }
193179 }
194180
195181 function sort(xs) {
196182 return fromArray(toArray(xs).sort(function(a,b) { return a - b}));
197183 }
198184
199− function take(n) { return function(xs) {
185+ function take(n, xs) {
200186 var arr = [];
201187 while (xs.ctor === "Cons" && n > 0) {
202188 arr.push(xs._0);
@@ -204,16 +190,14 @@
204190 --n;
205191 }
206192 return fromArray(arr);
207− }
208193 }
209194
210− function drop(n) { return function(xs) {
195+ function drop(n, xs) {
211196 while (xs.ctor === "Cons" && n > 0) {
212197 xs = xs._1;
213198 --n;
214199 }
215200 return xs;
216− }
217201 }
218202
219203 Elm.Native.List = {
@@ -228,23 +212,25 @@
228212 tail:tail,
229213 last:last,
230214
231− map:map,
232− foldl:foldl,
233− foldr:foldr,
215+ map:F2(map),
216+ foldl:F3(foldl),
217+ foldr:F3(foldr),
234218
235− foldl1:foldl1,
236− foldr1:foldr1,
237− scanl:scanl,
238− scanl1:scanl1,
239− filter:filter,
219+ foldl1:F2(foldl1),
220+ foldr1:F2(foldr1),
221+ scanl:F3(scanl),
222+ scanl1:F2(scanl1),
223+ filter:F2(filter),
240224 length:length,
241225 reverse:reverse,
242226
243− all:all,
244− any:any,
245− zipWith:zipWith,
246− zip:zip,
227+ all:F2(all),
228+ any:F2(any),
229+ zipWith:F3(zipWith),
230+ zip:F2(zip),
247231 sort:sort,
248− take:take,
249− drop:drop};
232+ take:F2(take),
233+ drop:F2(drop)
234+ };
235+
250236}());