on master help sign in
Fix folds
e1e232cChristian Widera
libraries/Native/Array.js+17−5
@@ -255,19 +255,31 @@ Elm.Native.Array.make = function(elm) {
255 }
255 }
256
256
257 function foldl(f, b, a) {
257 function foldl(f, b, a) {
258− for (var i = 0; i < a.table.length; i++) {
258+ if (a.height == 0) {
259+ for (var i = 0; i < a.table.length; i++) {
260+ b = A2(f, a.table[i], b);
261+ }
262+ } else {
263+ for (var i = 0; i < a.table.length; i++) {
259− b = A2(f, a.height == 0 ? a.table[i] : foldl(f, b, a.table[i]), b);
264+ b = foldl(f, b, a.table[i]);
265+ }
260 }
266 }
261 return b;
267 return b;
262 }
268 }
263
269
264 function foldr(f, b, a) {
270 function foldr(f, b, a) {
265− for (var i = a.table.length; i--; ) {
271+ if (a.height == 0) {
266− b = A2(f, a.height == 0 ? a.table[i] : foldr(f, b, a.table[i]), b);
272+ for (var i = a.table.length; i--; ) {
273+ b = A2(f, a.table[i], b);
274+ }
275+ } else {
276+ for (var i = a.table.length; i--; ) {
277+ b = foldl(f, b, a.table[i]);
278+ }
267 }
279 }
268 return b;
280 return b;
269 }
281 }
270−
282+
271 // TODO: currently, it slices the right, then the left. This can be
283 // TODO: currently, it slices the right, then the left. This can be
272 // optimized.
284 // optimized.
273 function slice(from, to, a) {
285 function slice(from, to, a) {