| // Generated by LiveScript 1.6.0 | |
| var each, map, compact, filter, reject, remove, 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; | |
| each = curry$(function(f, xs){ | |
|   var i$, len$, x; | |
|   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { | |
|     x = xs[i$]; | |
|     f(x); | |
|   } | |
|   return xs; | |
| }); | |
| map = curry$(function(f, xs){ | |
|   var i$, len$, x, results$ = []; | |
|   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { | |
|     x = xs[i$]; | |
|     results$.push(f(x)); | |
|   } | |
|   return results$; | |
| }); | |
| compact = function(xs){ | |
|   var i$, len$, x, results$ = []; | |
|   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { | |
|     x = xs[i$]; | |
|     if (x) { | |
|       results$.push(x); | |
|     } | |
|   } | |
|   return results$; | |
| }; | |
| filter = curry$(function(f, xs){ | |
|   var i$, len$, x, results$ = []; | |
|   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { | |
|     x = xs[i$]; | |
|     if (f(x)) { | |
|       results$.push(x); | |
|     } | |
|   } | |
|   return results$; | |
| }); | |
| reject = curry$(function(f, xs){ | |
|   var i$, len$, x, results$ = []; | |
|   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { | |
|     x = xs[i$]; | |
|     if (!f(x)) { | |
|       results$.push(x); | |
|     } | |
|   } | |
|   return results$; | |
| }); | |
| remove = curry$(function(el, xs){ | |
|   var i, x$; | |
|   i = elemIndex(el, xs); | |
|   x$ = xs.slice(); | |
|   if (i != null) { | |
|     x$.splice(i, 1); | |
|   } | |
|   return x$; | |
| }); | |
| partition = curry$(function(f, xs){ | |
|   var passed, failed, i$, len$, x; | |
|   passed = []; | |
|   failed = []; | |
|   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { | |
|     x = xs[i$]; | |
|     (f(x) ? passed : failed).push(x); | |
|   } | |
|   return [passed, failed]; | |
| }); | |
| find = curry$(function(f, xs){ | |
|   var i$, len$, x; | |
|   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { | |
|     x = xs[i$]; | |
|     if (f(x)) { | |
|       return x; | |
|     } | |
|   } | |
| }); | |
| head = first = function(xs){ | |
|   return xs[0]; | |
| }; | |
| tail = function(xs){ | |
|   if (!xs.length) { | |
|     return; | |
|   } | |
|   return xs.slice(1); | |
| }; | |
| last = function(xs){ | |
|   return xs[xs.length - 1]; | |
| }; | |
| initial = function(xs){ | |
|   if (!xs.length) { | |
|     return; | |
|   } | |
|   return xs.slice(0, -1); | |
| }; | |
| empty = function(xs){ | |
|   return !xs.length; | |
| }; | |
| reverse = function(xs){ | |
|   return xs.concat().reverse(); | |
| }; | |
| unique = function(xs){ | |
|   var result, i$, len$, x; | |
|   result = []; | |
|   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { | |
|     x = xs[i$]; | |
|     if (!in$(x, result)) { | |
|       result.push(x); | |
|     } | |
|   } | |
|   return result; | |
| }; | |
| uniqueBy = curry$(function(f, xs){ | |
|   var seen, i$, len$, x, val, results$ = []; | |
|   seen = []; | |
|   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { | |
|     x = xs[i$]; | |
|     val = f(x); | |
|     if (in$(val, seen)) { | |
|       continue; | |
|     } | |
|     seen.push(val); | |
|     results$.push(x); | |
|   } | |
|   return results$; | |
| }); | |
| fold = foldl = curry$(function(f, memo, xs){ | |
|   var i$, len$, x; | |
|   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { | |
|     x = xs[i$]; | |
|     memo = f(memo, x); | |
|   } | |
|   return memo; | |
| }); | |
| fold1 = foldl1 = curry$(function(f, xs){ | |
|   return fold(f, xs[0], xs.slice(1)); | |
| }); | |
| foldr = curry$(function(f, memo, xs){ | |
|   var i$, x; | |
|   for (i$ = xs.length - 1; i$ >= 0; --i$) { | |
|     x = xs[i$]; | |
|     memo = f(x, memo); | |
|   } | |
|   return memo; | |
| }); | |
| foldr1 = curry$(function(f, xs){ | |
|   return foldr(f, xs[xs.length - 1], xs.slice(0, -1)); | |
| }); | |
| unfoldr = curry$(function(f, b){ | |
|   var result, x, that; | |
|   result = []; | |
|   x = b; | |
|   while ((that = f(x)) != null) { | |
|     result.push(that[0]); | |
|     x = that[1]; | |
|   } | |
|   return result; | |
| }); | |
| concat = function(xss){ | |
|   return [].concat.apply([], xss); | |
| }; | |
| concatMap = curry$(function(f, xs){ | |
|   var x; | |
|   return [].concat.apply([], (function(){ | |
|     var i$, ref$, len$, results$ = []; | |
|     for (i$ = 0, len$ = (ref$ = xs).length; i$ < len$; ++i$) { | |
|       x = ref$[i$]; | |
|       results$.push(f(x)); | |
|     } | |
|     return results$; | |
|   }())); | |
| }); | |
| flatten = function(xs){ | |
|   var x; | |
|   return [].concat.apply([], (function(){ | |
|     var i$, ref$, len$, results$ = []; | |
|     for (i$ = 0, len$ = (ref$ = xs).length; i$ < len$; ++i$) { | |
|       x = ref$[i$]; | |
|       if (toString$.call(x).slice(8, -1) === 'Array') { | |
|         results$.push(flatten(x)); | |
|       } else { | |
|         results$.push(x); | |
|       } | |
|     } | |
|     return results$; | |
|   }())); | |
| }; | |
| difference = function(xs){ | |
|   var yss, res$, i$, to$, results, len$, x, j$, len1$, ys; | |
|   res$ = []; | |
|   for (i$ = 1, to$ = arguments.length; i$ < to$; ++i$) { | |
|     res$.push(arguments[i$]); | |
|   } | |
|   yss = res$; | |
|   results = []; | |
|   outer: for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { | |
|     x = xs[i$]; | |
|     for (j$ = 0, len1$ = yss.length; j$ < len1$; ++j$) { | |
|       ys = yss[j$]; | |
|       if (in$(x, ys)) { | |
|         continue outer; | |
|       } | |
|     } | |
|     results.push(x); | |
|   } | |
|   return results; | |
| }; | |
| intersection = function(xs){ | |
|   var yss, res$, i$, to$, results, len$, x, j$, len1$, ys; | |
|   res$ = []; | |
|   for (i$ = 1, to$ = arguments.length; i$ < to$; ++i$) { | |
|     res$.push(arguments[i$]); | |
|   } | |
|   yss = res$; | |
|   results = []; | |
|   outer: for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { | |
|     x = xs[i$]; | |
|     for (j$ = 0, len1$ = yss.length; j$ < len1$; ++j$) { | |
|       ys = yss[j$]; | |
|       if (!in$(x, ys)) { | |
|         continue outer; | |
|       } | |
|     } | |
|     results.push(x); | |
|   } | |
|   return results; | |
| }; | |
| union = function(){ | |
|   var xss, res$, i$, to$, results, len$, xs, j$, len1$, x; | |
|   res$ = []; | |
|   for (i$ = 0, to$ = arguments.length; i$ < to$; ++i$) { | |
|     res$.push(arguments[i$]); | |
|   } | |
|   xss = res$; | |
|   results = []; | |
|   for (i$ = 0, len$ = xss.length; i$ < len$; ++i$) { | |
|     xs = xss[i$]; | |
|     for (j$ = 0, len1$ = xs.length; j$ < len1$; ++j$) { | |
|       x = xs[j$]; | |
|       if (!in$(x, results)) { | |
|         results.push(x); | |
|       } | |
|     } | |
|   } | |
|   return results; | |
| }; | |
| countBy = curry$(function(f, xs){ | |
|   var results, i$, len$, x, key; | |
|   results = {}; | |
|   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { | |
|     x = xs[i$]; | |
|     key = f(x); | |
|     if (key in results) { | |
|       results[key] += 1; | |
|     } else { | |
|       results[key] = 1; | |
|     } | |
|   } | |
|   return results; | |
| }); | |
| groupBy = curry$(function(f, xs){ | |
|   var results, i$, len$, x, key; | |
|   results = {}; | |
|   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { | |
|     x = xs[i$]; | |
|     key = f(x); | |
|     if (key in results) { | |
|       results[key].push(x); | |
|     } else { | |
|       results[key] = [x]; | |
|     } | |
|   } | |
|   return results; | |
| }); | |
| andList = function(xs){ | |
|   var i$, len$, x; | |
|   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { | |
|     x = xs[i$]; | |
|     if (!x) { | |
|       return false; | |
|     } | |
|   } | |
|   return true; | |
| }; | |
| orList = function(xs){ | |
|   var i$, len$, x; | |
|   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { | |
|     x = xs[i$]; | |
|     if (x) { | |
|       return true; | |
|     } | |
|   } | |
|   return false; | |
| }; | |
| any = curry$(function(f, xs){ | |
|   var i$, len$, x; | |
|   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { | |
|     x = xs[i$]; | |
|     if (f(x)) { | |
|       return true; | |
|     } | |
|   } | |
|   return false; | |
| }); | |
| all = curry$(function(f, xs){ | |
|   var i$, len$, x; | |
|   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { | |
|     x = xs[i$]; | |
|     if (!f(x)) { | |
|       return false; | |
|     } | |
|   } | |
|   return true; | |
| }); | |
| sort = function(xs){ | |
|   return xs.concat().sort(function(x, y){ | |
|     if (x > y) { | |
|       return 1; | |
|     } else if (x < y) { | |
|       return -1; | |
|     } else { | |
|       return 0; | |
|     } | |
|   }); | |
| }; | |
| sortWith = curry$(function(f, xs){ | |
|   return xs.concat().sort(f); | |
| }); | |
| sortBy = curry$(function(f, xs){ | |
|   return xs.concat().sort(function(x, y){ | |
|     if (f(x) > f(y)) { | |
|       return 1; | |
|     } else if (f(x) < f(y)) { | |
|       return -1; | |
|     } else { | |
|       return 0; | |
|     } | |
|   }); | |
| }); | |
| sum = function(xs){ | |
|   var result, i$, len$, x; | |
|   result = 0; | |
|   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { | |
|     x = xs[i$]; | |
|     result += x; | |
|   } | |
|   return result; | |
| }; | |
| product = function(xs){ | |
|   var result, i$, len$, x; | |
|   result = 1; | |
|   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { | |
|     x = xs[i$]; | |
|     result *= x; | |
|   } | |
|   return result; | |
| }; | |
| mean = average = function(xs){ | |
|   var sum, i$, len$, x; | |
|   sum = 0; | |
|   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { | |
|     x = xs[i$]; | |
|     sum += x; | |
|   } | |
|   return sum / xs.length; | |
| }; | |
| maximum = function(xs){ | |
|   var max, i$, ref$, len$, x; | |
|   max = xs[0]; | |
|   for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) { | |
|     x = ref$[i$]; | |
|     if (x > max) { | |
|       max = x; | |
|     } | |
|   } | |
|   return max; | |
| }; | |
| minimum = function(xs){ | |
|   var min, i$, ref$, len$, x; | |
|   min = xs[0]; | |
|   for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) { | |
|     x = ref$[i$]; | |
|     if (x < min) { | |
|       min = x; | |
|     } | |
|   } | |
|   return min; | |
| }; | |
| maximumBy = curry$(function(f, xs){ | |
|   var max, i$, ref$, len$, x; | |
|   max = xs[0]; | |
|   for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) { | |
|     x = ref$[i$]; | |
|     if (f(x) > f(max)) { | |
|       max = x; | |
|     } | |
|   } | |
|   return max; | |
| }); | |
| minimumBy = curry$(function(f, xs){ | |
|   var min, i$, ref$, len$, x; | |
|   min = xs[0]; | |
|   for (i$ = 0, len$ = (ref$ = xs.slice(1)).length; i$ < len$; ++i$) { | |
|     x = ref$[i$]; | |
|     if (f(x) < f(min)) { | |
|       min = x; | |
|     } | |
|   } | |
|   return min; | |
| }); | |
| scan = scanl = curry$(function(f, memo, xs){ | |
|   var last, x; | |
|   last = memo; | |
|   return [memo].concat((function(){ | |
|     var i$, ref$, len$, results$ = []; | |
|     for (i$ = 0, len$ = (ref$ = xs).length; i$ < len$; ++i$) { | |
|       x = ref$[i$]; | |
|       results$.push(last = f(last, x)); | |
|     } | |
|     return results$; | |
|   }())); | |
| }); | |
| scan1 = scanl1 = curry$(function(f, xs){ | |
|   if (!xs.length) { | |
|     return; | |
|   } | |
|   return scan(f, xs[0], xs.slice(1)); | |
| }); | |
| scanr = curry$(function(f, memo, xs){ | |
|   xs = xs.concat().reverse(); | |
|   return scan(f, memo, xs).reverse(); | |
| }); | |
| scanr1 = curry$(function(f, xs){ | |
|   if (!xs.length) { | |
|     return; | |
|   } | |
|   xs = xs.concat().reverse(); | |
|   return scan(f, xs[0], xs.slice(1)).reverse(); | |
| }); | |
| slice = curry$(function(x, y, xs){ | |
|   return xs.slice(x, y); | |
| }); | |
| take = curry$(function(n, xs){ | |
|   if (n <= 0) { | |
|     return xs.slice(0, 0); | |
|   } else { | |
|     return xs.slice(0, n); | |
|   } | |
| }); | |
| drop = curry$(function(n, xs){ | |
|   if (n <= 0) { | |
|     return xs; | |
|   } else { | |
|     return xs.slice(n); | |
|   } | |
| }); | |
| splitAt = curry$(function(n, xs){ | |
|   return [take(n, xs), drop(n, xs)]; | |
| }); | |
| takeWhile = curry$(function(p, xs){ | |
|   var len, i; | |
|   len = xs.length; | |
|   if (!len) { | |
|     return xs; | |
|   } | |
|   i = 0; | |
|   while (i < len && p(xs[i])) { | |
|     i += 1; | |
|   } | |
|   return xs.slice(0, i); | |
| }); | |
| dropWhile = curry$(function(p, xs){ | |
|   var len, i; | |
|   len = xs.length; | |
|   if (!len) { | |
|     return xs; | |
|   } | |
|   i = 0; | |
|   while (i < len && p(xs[i])) { | |
|     i += 1; | |
|   } | |
|   return xs.slice(i); | |
| }); | |
| span = curry$(function(p, xs){ | |
|   return [takeWhile(p, xs), dropWhile(p, xs)]; | |
| }); | |
| breakList = curry$(function(p, xs){ | |
|   return span(compose$(p, not$), xs); | |
| }); | |
| zip = curry$(function(xs, ys){ | |
|   var result, len, i$, len$, i, x; | |
|   result = []; | |
|   len = ys.length; | |
|   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { | |
|     i = i$; | |
|     x = xs[i$]; | |
|     if (i === len) { | |
|       break; | |
|     } | |
|     result.push([x, ys[i]]); | |
|   } | |
|   return result; | |
| }); | |
| zipWith = curry$(function(f, xs, ys){ | |
|   var result, len, i$, len$, i, x; | |
|   result = []; | |
|   len = ys.length; | |
|   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { | |
|     i = i$; | |
|     x = xs[i$]; | |
|     if (i === len) { | |
|       break; | |
|     } | |
|     result.push(f(x, ys[i])); | |
|   } | |
|   return result; | |
| }); | |
| zipAll = function(){ | |
|   var xss, res$, i$, to$, minLength, len$, xs, ref$, i, lresult$, j$, results$ = []; | |
|   res$ = []; | |
|   for (i$ = 0, to$ = arguments.length; i$ < to$; ++i$) { | |
|     res$.push(arguments[i$]); | |
|   } | |
|   xss = res$; | |
|   minLength = undefined; | |
|   for (i$ = 0, len$ = xss.length; i$ < len$; ++i$) { | |
|     xs = xss[i$]; | |
|     minLength <= (ref$ = xs.length) || (minLength = ref$); | |
|   } | |
|   for (i$ = 0; i$ < minLength; ++i$) { | |
|     i = i$; | |
|     lresult$ = []; | |
|     for (j$ = 0, len$ = xss.length; j$ < len$; ++j$) { | |
|       xs = xss[j$]; | |
|       lresult$.push(xs[i]); | |
|     } | |
|     results$.push(lresult$); | |
|   } | |
|   return results$; | |
| }; | |
| zipAllWith = function(f){ | |
|   var xss, res$, i$, to$, minLength, len$, xs, ref$, i, results$ = []; | |
|   res$ = []; | |
|   for (i$ = 1, to$ = arguments.length; i$ < to$; ++i$) { | |
|     res$.push(arguments[i$]); | |
|   } | |
|   xss = res$; | |
|   minLength = undefined; | |
|   for (i$ = 0, len$ = xss.length; i$ < len$; ++i$) { | |
|     xs = xss[i$]; | |
|     minLength <= (ref$ = xs.length) || (minLength = ref$); | |
|   } | |
|   for (i$ = 0; i$ < minLength; ++i$) { | |
|     i = i$; | |
|     results$.push(f.apply(null, (fn$()))); | |
|   } | |
|   return results$; | |
|   function fn$(){ | |
|     var i$, ref$, len$, results$ = []; | |
|     for (i$ = 0, len$ = (ref$ = xss).length; i$ < len$; ++i$) { | |
|       xs = ref$[i$]; | |
|       results$.push(xs[i]); | |
|     } | |
|     return results$; | |
|   } | |
| }; | |
| at = curry$(function(n, xs){ | |
|   if (n < 0) { | |
|     return xs[xs.length + n]; | |
|   } else { | |
|     return xs[n]; | |
|   } | |
| }); | |
| elemIndex = curry$(function(el, xs){ | |
|   var i$, len$, i, x; | |
|   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { | |
|     i = i$; | |
|     x = xs[i$]; | |
|     if (x === el) { | |
|       return i; | |
|     } | |
|   } | |
| }); | |
| elemIndices = curry$(function(el, xs){ | |
|   var i$, len$, i, x, results$ = []; | |
|   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { | |
|     i = i$; | |
|     x = xs[i$]; | |
|     if (x === el) { | |
|       results$.push(i); | |
|     } | |
|   } | |
|   return results$; | |
| }); | |
| findIndex = curry$(function(f, xs){ | |
|   var i$, len$, i, x; | |
|   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { | |
|     i = i$; | |
|     x = xs[i$]; | |
|     if (f(x)) { | |
|       return i; | |
|     } | |
|   } | |
| }); | |
| findIndices = curry$(function(f, xs){ | |
|   var i$, len$, i, x, results$ = []; | |
|   for (i$ = 0, len$ = xs.length; i$ < len$; ++i$) { | |
|     i = i$; | |
|     x = xs[i$]; | |
|     if (f(x)) { | |
|       results$.push(i); | |
|     } | |
|   } | |
|   return results$; | |
| }); | |
| module.exports = { | |
|   each: each, | |
|   map: map, | |
|   filter: filter, | |
|   compact: compact, | |
|   reject: reject, | |
|   remove: remove, | |
|   partition: partition, | |
|   find: find, | |
|   head: head, | |
|   first: first, | |
|   tail: tail, | |
|   last: last, | |
|   initial: initial, | |
|   empty: empty, | |
|   reverse: reverse, | |
|   difference: difference, | |
|   intersection: intersection, | |
|   union: union, | |
|   countBy: countBy, | |
|   groupBy: groupBy, | |
|   fold: fold, | |
|   fold1: fold1, | |
|   foldl: foldl, | |
|   foldl1: foldl1, | |
|   foldr: foldr, | |
|   foldr1: foldr1, | |
|   unfoldr: unfoldr, | |
|   andList: andList, | |
|   orList: orList, | |
|   any: any, | |
|   all: all, | |
|   unique: unique, | |
|   uniqueBy: uniqueBy, | |
|   sort: sort, | |
|   sortWith: sortWith, | |
|   sortBy: sortBy, | |
|   sum: sum, | |
|   product: product, | |
|   mean: mean, | |
|   average: average, | |
|   concat: concat, | |
|   concatMap: concatMap, | |
|   flatten: flatten, | |
|   maximum: maximum, | |
|   minimum: minimum, | |
|   maximumBy: maximumBy, | |
|   minimumBy: minimumBy, | |
|   scan: scan, | |
|   scan1: scan1, | |
|   scanl: scanl, | |
|   scanl1: scanl1, | |
|   scanr: scanr, | |
|   scanr1: scanr1, | |
|   slice: slice, | |
|   take: take, | |
|   drop: drop, | |
|   splitAt: splitAt, | |
|   takeWhile: takeWhile, | |
|   dropWhile: dropWhile, | |
|   span: span, | |
|   breakList: breakList, | |
|   zip: zip, | |
|   zipWith: zipWith, | |
|   zipAll: zipAll, | |
|   zipAllWith: zipAllWith, | |
|   at: at, | |
|   elemIndex: elemIndex, | |
|   elemIndices: elemIndices, | |
|   findIndex: findIndex, | |
|   findIndices: findIndices | |
| }; | |
| function curry$(f, bound){ | |
|   var context, | |
|   _curry = function(args) { | |
|     return f.length > 1 ? function(){ | |
|       var params = args ? args.concat() : []; | |
|       context = bound ? context || this : this; | |
|       return params.push.apply(params, arguments) < | |
|           f.length && arguments.length ? | |
|         _curry.call(context, params) : f.apply(context, params); | |
|     } : f; | |
|   }; | |
|   return _curry(); | |
| } | |
| function in$(x, xs){ | |
|   var i = -1, l = xs.length >>> 0; | |
|   while (++i < l) if (x === xs[i]) return true; | |
|   return false; | |
| } | |
| function compose$() { | |
|   var functions = arguments; | |
|   return function() { | |
|     var i, result; | |
|     result = functions[0].apply(this, arguments); | |
|     for (i = 1; i < functions.length; ++i) { | |
|       result = functions[i](result); | |
|     } | |
|     return result; | |
|   }; | |
| } | |
| function not$(x){ return !x; }
 |