rescript
Version:
ReScript toolchain
332 lines (302 loc) • 5.3 kB
JavaScript
'use strict';
var Js_vector = require("./js_vector.js");
var Caml_option = require("./caml_option.js");
function length(l) {
var _len = 0;
var _param = l;
while(true) {
var param = _param;
var len = _len;
if (!param) {
return len;
}
_param = param.tl;
_len = len + 1 | 0;
continue ;
};
}
function cons(x, xs) {
return {
hd: x,
tl: xs
};
}
function isEmpty(x) {
return x === /* [] */0;
}
function hd(param) {
if (param) {
return Caml_option.some(param.hd);
}
}
function tl(param) {
if (param) {
return param.tl;
}
}
function nth(l, n) {
if (n < 0) {
return ;
}
var _l = l;
var _n = n;
while(true) {
var n$1 = _n;
var l$1 = _l;
if (!l$1) {
return ;
}
if (n$1 === 0) {
return Caml_option.some(l$1.hd);
}
_n = n$1 - 1 | 0;
_l = l$1.tl;
continue ;
};
}
function revAppend(_l1, _l2) {
while(true) {
var l2 = _l2;
var l1 = _l1;
if (!l1) {
return l2;
}
_l2 = {
hd: l1.hd,
tl: l2
};
_l1 = l1.tl;
continue ;
};
}
function rev(l) {
return revAppend(l, /* [] */0);
}
function mapRevAux(f, _acc, _ls) {
while(true) {
var ls = _ls;
var acc = _acc;
if (!ls) {
return acc;
}
_ls = ls.tl;
_acc = {
hd: f(ls.hd),
tl: acc
};
continue ;
};
}
function mapRev(f, ls) {
return mapRevAux(f, /* [] */0, ls);
}
function map(f, ls) {
return revAppend(mapRevAux(f, /* [] */0, ls), /* [] */0);
}
function iter(f, _param) {
while(true) {
var param = _param;
if (!param) {
return ;
}
f(param.hd);
_param = param.tl;
continue ;
};
}
function iteri(f, l) {
var _i = 0;
var _param = l;
while(true) {
var param = _param;
var i = _i;
if (!param) {
return ;
}
f(i, param.hd);
_param = param.tl;
_i = i + 1 | 0;
continue ;
};
}
function foldLeft(f, _accu, _l) {
while(true) {
var l = _l;
var accu = _accu;
if (!l) {
return accu;
}
_l = l.tl;
_accu = f(accu, l.hd);
continue ;
};
}
function tailLoop(f, _acc, _param) {
while(true) {
var param = _param;
var acc = _acc;
if (!param) {
return acc;
}
_param = param.tl;
_acc = f(param.hd, acc);
continue ;
};
}
function foldRight(f, l, init) {
var loop = function (n, param) {
if (!param) {
return init;
}
var t = param.tl;
var h = param.hd;
if (n < 1000) {
return f(h, loop(n + 1 | 0, t));
} else {
return f(h, tailLoop(f, init, revAppend(t, /* [] */0)));
}
};
return loop(0, l);
}
function flatten(lx) {
var _acc = /* [] */0;
var _lx = lx;
while(true) {
var lx$1 = _lx;
var acc = _acc;
if (!lx$1) {
return revAppend(acc, /* [] */0);
}
_lx = lx$1.tl;
_acc = revAppend(lx$1.hd, acc);
continue ;
};
}
function filterRevAux(f, _acc, _xs) {
while(true) {
var xs = _xs;
var acc = _acc;
if (!xs) {
return acc;
}
var ys = xs.tl;
var y = xs.hd;
if (f(y)) {
_xs = ys;
_acc = {
hd: y,
tl: acc
};
continue ;
}
_xs = ys;
continue ;
};
}
function filter(f, xs) {
return revAppend(filterRevAux(f, /* [] */0, xs), /* [] */0);
}
function filterMapRevAux(f, _acc, _xs) {
while(true) {
var xs = _xs;
var acc = _acc;
if (!xs) {
return acc;
}
var ys = xs.tl;
var z = f(xs.hd);
if (z !== undefined) {
_xs = ys;
_acc = {
hd: Caml_option.valFromOption(z),
tl: acc
};
continue ;
}
_xs = ys;
continue ;
};
}
function filterMap(f, xs) {
return revAppend(filterMapRevAux(f, /* [] */0, xs), /* [] */0);
}
function countBy(f, xs) {
var _acc = 0;
var _xs = xs;
while(true) {
var xs$1 = _xs;
var acc = _acc;
if (!xs$1) {
return acc;
}
_xs = xs$1.tl;
_acc = f(xs$1.hd) ? acc + 1 | 0 : acc;
continue ;
};
}
function init(n, f) {
return Js_vector.toList(Js_vector.init(n, f));
}
function toVector(xs) {
if (!xs) {
return [];
}
var a = new Array(length(xs));
var _i = 0;
var _param = xs;
while(true) {
var param = _param;
var i = _i;
if (!param) {
return a;
}
a[i] = param.hd;
_param = param.tl;
_i = i + 1 | 0;
continue ;
};
}
function equal(cmp, _xs, _ys) {
while(true) {
var ys = _ys;
var xs = _xs;
if (!xs) {
if (ys) {
return false;
} else {
return true;
}
}
if (!ys) {
return false;
}
if (!cmp(xs.hd, ys.hd)) {
return false;
}
_ys = ys.tl;
_xs = xs.tl;
continue ;
};
}
exports.length = length;
exports.cons = cons;
exports.isEmpty = isEmpty;
exports.hd = hd;
exports.tl = tl;
exports.nth = nth;
exports.revAppend = revAppend;
exports.rev = rev;
exports.mapRev = mapRev;
exports.map = map;
exports.iter = iter;
exports.iteri = iteri;
exports.foldLeft = foldLeft;
exports.foldRight = foldRight;
exports.flatten = flatten;
exports.filter = filter;
exports.filterMap = filterMap;
exports.countBy = countBy;
exports.init = init;
exports.toVector = toVector;
exports.equal = equal;
/* No side effect */