List.js
  1  // Generated by LiveScript 1.4.0
  2  var each, map, compact, filter, reject, partition, find, head, first, tail, last, initial, empty, reverse, unique, uniqueBy, fold, foldl, fold1, foldl1, foldr, foldr1, unfoldr, concat, concatMap, flatten, difference, intersection, union, countBy, groupBy, andList, orList, any, all, sort, sortWith, sortBy, sum, product, mean, average, maximum, minimum, maximumBy, minimumBy, scan, scanl, scan1, scanl1, scanr, scanr1, slice, take, drop, splitAt, takeWhile, dropWhile, span, breakList, zip, zipWith, zipAll, zipAllWith, at, elemIndex, elemIndices, findIndex, findIndices, toString$ = {}.toString, slice$ = [].slice;
  3  each = curry$(function(f, xs){
  4    var i$, len$, x;
  5    for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
  6      x = xs[i$];
  7      f(x);
  8    }
  9    return xs;
 10  });
 11  map = curry$(function(f, xs){
 12    var i$, len$, x, results$ = [];
 13    for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 14      x = xs[i$];
 15      results$.push(f(x));
 16    }
 17    return results$;
 18  });
 19  compact = function(xs){
 20    var i$, len$, x, results$ = [];
 21    for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 22      x = xs[i$];
 23      if (x) {
 24        results$.push(x);
 25      }
 26    }
 27    return results$;
 28  };
 29  filter = curry$(function(f, xs){
 30    var i$, len$, x, results$ = [];
 31    for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 32      x = xs[i$];
 33      if (f(x)) {
 34        results$.push(x);
 35      }
 36    }
 37    return results$;
 38  });
 39  reject = curry$(function(f, xs){
 40    var i$, len$, x, results$ = [];
 41    for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 42      x = xs[i$];
 43      if (!f(x)) {
 44        results$.push(x);
 45      }
 46    }
 47    return results$;
 48  });
 49  partition = curry$(function(f, xs){
 50    var passed, failed, i$, len$, x;
 51    passed = [];
 52    failed = [];
 53    for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 54      x = xs[i$];
 55      (f(x) ? passed : failed).push(x);
 56    }
 57    return [passed, failed];
 58  });
 59  find = curry$(function(f, xs){
 60    var i$, len$, x;
 61    for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 62      x = xs[i$];
 63      if (f(x)) {
 64        return x;
 65      }
 66    }
 67  });
 68  head = first = function(xs){
 69    return xs[0];
 70  };
 71  tail = function(xs){
 72    if (!xs.length) {
 73      return;
 74    }
 75    return xs.slice(1);
 76  };
 77  last = function(xs){
 78    return xs[xs.length - 1];
 79  };
 80  initial = function(xs){
 81    if (!xs.length) {
 82      return;
 83    }
 84    return xs.slice(0, -1);
 85  };
 86  empty = function(xs){
 87    return !xs.length;
 88  };
 89  reverse = function(xs){
 90    return xs.concat().reverse();
 91  };
 92  unique = function(xs){
 93    var result, i$, len$, x;
 94    result = [];
 95    for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
 96      x = xs[i$];
 97      if (!in$(x, result)) {
 98        result.push(x);
 99      }
100    }
101    return result;
102  };
103  uniqueBy = curry$(function(f, xs){
104    var seen, i$, len$, x, val, results$ = [];
105    seen = [];
106    for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
107      x = xs[i$];
108      val = f(x);
109      if (in$(val, seen)) {
110        continue;
111      }
112      seen.push(val);
113      results$.push(x);
114    }
115    return results$;
116  });
117  fold = foldl = curry$(function(f, memo, xs){
118    var i$, len$, x;
119    for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
120      x = xs[i$];
121      memo = f(memo, x);
122    }
123    return memo;
124  });
125  fold1 = foldl1 = curry$(function(f, xs){
126    return fold(f, xs[0], xs.slice(1));
127  });
128  foldr = curry$(function(f, memo, xs){
129    var i$, x;
130    for (i$ = xs.length - 1; i$ >= 0; --i$) {
131      x = xs[i$];
132      memo = f(x, memo);
133    }
134    return memo;
135  });
136  foldr1 = curry$(function(f, xs){
137    return foldr(f, xs[xs.length - 1], xs.slice(0, -1));
138  });
139  unfoldr = curry$(function(f, b){
140    var result, x, that;
141    result = [];
142    x = b;
143    while ((that = f(x)) != null) {
144      result.push(that[0]);
145      x = that[1];
146    }
147    return result;
148  });
149  concat = function(xss){
150    return [].concat.apply([], xss);
151  };
152  concatMap = curry$(function(f, xs){
153    var x;
154    return [].concat.apply([], (function(){
155      var i$, ref$, len$, results$ = [];
156      for (i$ = 0, len$ = (ref$ = xs).length; i$ < len$; ++i$) {
157        x = ref$[i$];
158        results$.push(f(x));
159      }
160      return results$;
161    }()));
162  });
163  flatten = function(xs){
164    var x;
165    return [].concat.apply([], (function(){
166      var i$, ref$, len$, results$ = [];
167      for (i$ = 0, len$ = (ref$ = xs).length; i$ < len$; ++i$) {
168        x = ref$[i$];
169        if (toString$.call(x).slice(8, -1) === 'Array') {
170          results$.push(flatten(x));
171        } else {
172          results$.push(x);
173        }
174      }
175      return results$;
176    }()));
177  };
178  difference = function(xs){
179    var yss, results, i$, len$, x, j$, len1$, ys;
180    yss = slice$.call(arguments, 1);
181    results = [];
182    outer: for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
183      x = xs[i$];
184      for (j$ = 0, len1$ = yss.length; j$ < len1$; ++j$) {
185        ys = yss[j$];
186        if (in$(x, ys)) {
187          continue outer;
188        }
189      }
190      results.push(x);
191    }
192    return results;
193  };
194  intersection = function(xs){
195    var yss, results, i$, len$, x, j$, len1$, ys;
196    yss = slice$.call(arguments, 1);
197    results = [];
198    outer: for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
199      x = xs[i$];
200      for (j$ = 0, len1$ = yss.length; j$ < len1$; ++j$) {
201        ys = yss[j$];
202        if (!in$(x, ys)) {
203          continue outer;
204        }
205      }
206      results.push(x);
207    }
208    return results;
209  };
210  union = function(){
211    var xss, results, i$, len$, xs, j$, len1$, x;
212    xss = slice$.call(arguments);
213    results = [];
214    for (i$ = 0, len$ = xss.length; i$ < len$; ++i$) {
215      xs = xss[i$];
216      for (j$ = 0, len1$ = xs.length; j$ < len1$; ++j$) {
217        x = xs[j$];
218        if (!in$(x, results)) {
219          results.push(x);
220        }
221      }
222    }
223    return results;
224  };
225  countBy = curry$(function(f, xs){
226    var results, i$, len$, x, key;
227    results = {};
228    for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
229      x = xs[i$];
230      key = f(x);
231      if (key in results) {
232        results[key] += 1;
233      } else {
234        results[key] = 1;
235      }
236    }
237    return results;
238  });
239  groupBy = curry$(function(f, xs){
240    var results, i$, len$, x, key;
241    results = {};
242    for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
243      x = xs[i$];
244      key = f(x);
245      if (key in results) {
246        results[key].push(x);
247      } else {
248        results[key] = [x];
249      }
250    }
251    return results;
252  });
253  andList = function(xs){
254    var i$, len$, x;
255    for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
256      x = xs[i$];
257      if (!x) {
258        return false;
259      }
260    }
261    return true;
262  };
263  orList = function(xs){
264    var i$, len$, x;
265    for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
266      x = xs[i$];
267      if (x) {
268        return true;
269      }
270    }
271    return false;
272  };
273  any = curry$(function(f, xs){
274    var i$, len$, x;
275    for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
276      x = xs[i$];
277      if (f(x)) {
278        return true;
279      }
280    }
281    return false;
282  });
283  all = curry$(function(f, xs){
284    var i$, len$, x;
285    for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
286      x = xs[i$];
287      if (!f(x)) {
288        return false;
289      }
290    }
291    return true;
292  });
293  sort = function(xs){
294    return xs.concat().sort(function(x, y){
295      if (x > y) {
296        return 1;
297      } else if (x < y) {
298        return -1;
299      } else {
300        return 0;
301      }
302    });
303  };
304  sortWith = curry$(function(f, xs){
305    return xs.concat().sort(f);
306  });
307  sortBy = curry$(function(f, xs){
308    return xs.concat().sort(function(x, y){
309      if (f(x) > f(y)) {
310        return 1;
311      } else if (f(x) < f(y)) {
312        return -1;
313      } else {
314        return 0;
315      }
316    });
317  });
318  sum = function(xs){
319    var result, i$, len$, x;
320    result = 0;
321    for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
322      x = xs[i$];
323      result += x;
324    }
325    return result;
326  };
327  product = function(xs){
328    var result, i$, len$, x;
329    result = 1;
330    for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
331      x = xs[i$];
332      result *= x;
333    }
334    return result;
335  };
336  mean = average = function(xs){
337    var sum, i$, len$, x;
338    sum = 0;
339    for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
340      x = xs[i$];
341      sum += x;
342    }
343    return sum / xs.length;
344  };
345  maximum = function(xs){
346    var max, i$, ref$, len$, x;
347    max = xs[0];
348    for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) {
349      x = ref$[i$];
350      if (x > max) {
351        max = x;
352      }
353    }
354    return max;
355  };
356  minimum = function(xs){
357    var min, i$, ref$, len$, x;
358    min = xs[0];
359    for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) {
360      x = ref$[i$];
361      if (x < min) {
362        min = x;
363      }
364    }
365    return min;
366  };
367  maximumBy = curry$(function(f, xs){
368    var max, i$, ref$, len$, x;
369    max = xs[0];
370    for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) {
371      x = ref$[i$];
372      if (f(x) > f(max)) {
373        max = x;
374      }
375    }
376    return max;
377  });
378  minimumBy = curry$(function(f, xs){
379    var min, i$, ref$, len$, x;
380    min = xs[0];
381    for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) {
382      x = ref$[i$];
383      if (f(x) < f(min)) {
384        min = x;
385      }
386    }
387    return min;
388  });
389  scan = scanl = curry$(function(f, memo, xs){
390    var last, x;
391    last = memo;
392    return [memo].concat((function(){
393      var i$, ref$, len$, results$ = [];
394      for (i$ = 0, len$ = (ref$ = xs).length; i$ < len$; ++i$) {
395        x = ref$[i$];
396        results$.push(last = f(last, x));
397      }
398      return results$;
399    }()));
400  });
401  scan1 = scanl1 = curry$(function(f, xs){
402    if (!xs.length) {
403      return;
404    }
405    return scan(f, xs[0], xs.slice(1));
406  });
407  scanr = curry$(function(f, memo, xs){
408    xs = xs.concat().reverse();
409    return scan(f, memo, xs).reverse();
410  });
411  scanr1 = curry$(function(f, xs){
412    if (!xs.length) {
413      return;
414    }
415    xs = xs.concat().reverse();
416    return scan(f, xs[0], xs.slice(1)).reverse();
417  });
418  slice = curry$(function(x, y, xs){
419    return xs.slice(x, y);
420  });
421  take = curry$(function(n, xs){
422    if (n <= 0) {
423      return xs.slice(0, 0);
424    } else {
425      return xs.slice(0, n);
426    }
427  });
428  drop = curry$(function(n, xs){
429    if (n <= 0) {
430      return xs;
431    } else {
432      return xs.slice(n);
433    }
434  });
435  splitAt = curry$(function(n, xs){
436    return [take(n, xs), drop(n, xs)];
437  });
438  takeWhile = curry$(function(p, xs){
439    var len, i;
440    len = xs.length;
441    if (!len) {
442      return xs;
443    }
444    i = 0;
445    while (i < len && p(xs[i])) {
446      i += 1;
447    }
448    return xs.slice(0, i);
449  });
450  dropWhile = curry$(function(p, xs){
451    var len, i;
452    len = xs.length;
453    if (!len) {
454      return xs;
455    }
456    i = 0;
457    while (i < len && p(xs[i])) {
458      i += 1;
459    }
460    return xs.slice(i);
461  });
462  span = curry$(function(p, xs){
463    return [takeWhile(p, xs), dropWhile(p, xs)];
464  });
465  breakList = curry$(function(p, xs){
466    return span(compose$(p, not$), xs);
467  });
468  zip = curry$(function(xs, ys){
469    var result, len, i$, len$, i, x;
470    result = [];
471    len = ys.length;
472    for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
473      i = i$;
474      x = xs[i$];
475      if (i === len) {
476        break;
477      }
478      result.push([x, ys[i]]);
479    }
480    return result;
481  });
482  zipWith = curry$(function(f, xs, ys){
483    var result, len, i$, len$, i, x;
484    result = [];
485    len = ys.length;
486    for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
487      i = i$;
488      x = xs[i$];
489      if (i === len) {
490        break;
491      }
492      result.push(f(x, ys[i]));
493    }
494    return result;
495  });
496  zipAll = function(){
497    var xss, minLength, i$, len$, xs, ref$, i, lresult$, j$, results$ = [];
498    xss = slice$.call(arguments);
499    minLength = undefined;
500    for (i$ = 0, len$ = xss.length; i$ < len$; ++i$) {
501      xs = xss[i$];
502      minLength <= (ref$ = xs.length) || (minLength = ref$);
503    }
504    for (i$ = 0; i$ < minLength; ++i$) {
505      i = i$;
506      lresult$ = [];
507      for (j$ = 0, len$ = xss.length; j$ < len$; ++j$) {
508        xs = xss[j$];
509        lresult$.push(xs[i]);
510      }
511      results$.push(lresult$);
512    }
513    return results$;
514  };
515  zipAllWith = function(f){
516    var xss, minLength, i$, len$, xs, ref$, i, results$ = [];
517    xss = slice$.call(arguments, 1);
518    minLength = undefined;
519    for (i$ = 0, len$ = xss.length; i$ < len$; ++i$) {
520      xs = xss[i$];
521      minLength <= (ref$ = xs.length) || (minLength = ref$);
522    }
523    for (i$ = 0; i$ < minLength; ++i$) {
524      i = i$;
525      results$.push(f.apply(null, (fn$())));
526    }
527    return results$;
528    function fn$(){
529      var i$, ref$, len$, results$ = [];
530      for (i$ = 0, len$ = (ref$ = xss).length; i$ < len$; ++i$) {
531        xs = ref$[i$];
532        results$.push(xs[i]);
533      }
534      return results$;
535    }
536  };
537  at = curry$(function(n, xs){
538    if (n < 0) {
539      return xs[xs.length + n];
540    } else {
541      return xs[n];
542    }
543  });
544  elemIndex = curry$(function(el, xs){
545    var i$, len$, i, x;
546    for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
547      i = i$;
548      x = xs[i$];
549      if (x === el) {
550        return i;
551      }
552    }
553  });
554  elemIndices = curry$(function(el, xs){
555    var i$, len$, i, x, results$ = [];
556    for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
557      i = i$;
558      x = xs[i$];
559      if (x === el) {
560        results$.push(i);
561      }
562    }
563    return results$;
564  });
565  findIndex = curry$(function(f, xs){
566    var i$, len$, i, x;
567    for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
568      i = i$;
569      x = xs[i$];
570      if (f(x)) {
571        return i;
572      }
573    }
574  });
575  findIndices = curry$(function(f, xs){
576    var i$, len$, i, x, results$ = [];
577    for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) {
578      i = i$;
579      x = xs[i$];
580      if (f(x)) {
581        results$.push(i);
582      }
583    }
584    return results$;
585  });
586  module.exports = {
587    each: each,
588    map: map,
589    filter: filter,
590    compact: compact,
591    reject: reject,
592    partition: partition,
593    find: find,
594    head: head,
595    first: first,
596    tail: tail,
597    last: last,
598    initial: initial,
599    empty: empty,
600    reverse: reverse,
601    difference: difference,
602    intersection: intersection,
603    union: union,
604    countBy: countBy,
605    groupBy: groupBy,
606    fold: fold,
607    fold1: fold1,
608    foldl: foldl,
609    foldl1: foldl1,
610    foldr: foldr,
611    foldr1: foldr1,
612    unfoldr: unfoldr,
613    andList: andList,
614    orList: orList,
615    any: any,
616    all: all,
617    unique: unique,
618    uniqueBy: uniqueBy,
619    sort: sort,
620    sortWith: sortWith,
621    sortBy: sortBy,
622    sum: sum,
623    product: product,
624    mean: mean,
625    average: average,
626    concat: concat,
627    concatMap: concatMap,
628    flatten: flatten,
629    maximum: maximum,
630    minimum: minimum,
631    maximumBy: maximumBy,
632    minimumBy: minimumBy,
633    scan: scan,
634    scan1: scan1,
635    scanl: scanl,
636    scanl1: scanl1,
637    scanr: scanr,
638    scanr1: scanr1,
639    slice: slice,
640    take: take,
641    drop: drop,
642    splitAt: splitAt,
643    takeWhile: takeWhile,
644    dropWhile: dropWhile,
645    span: span,
646    breakList: breakList,
647    zip: zip,
648    zipWith: zipWith,
649    zipAll: zipAll,
650    zipAllWith: zipAllWith,
651    at: at,
652    elemIndex: elemIndex,
653    elemIndices: elemIndices,
654    findIndex: findIndex,
655    findIndices: findIndices
656  };
657  function curry$(f, bound){
658    var context,
659    _curry = function(args) {
660      return f.length > 1 ? function(){
661        var params = args ? args.concat() : [];
662        context = bound ? context || this : this;
663        return params.push.apply(params, arguments) <
664            f.length && arguments.length ?
665          _curry.call(context, params) : f.apply(context, params);
666      } : f;
667    };
668    return _curry();
669  }
670  function in$(x, xs){
671    var i = -1, l = xs.length >>> 0;
672    while (++i < l) if (x === xs[i]) return true;
673    return false;
674  }
675  function compose$() {
676    var functions = arguments;
677    return function() {
678      var i, result;
679      result = functions[0].apply(this, arguments);
680      for (i = 1; i < functions.length; ++i) {
681        result = functions[i](result);
682      }
683      return result;
684    };
685  }
686  function not$(x){ return !x; }