@rescript/std
Version:
The motiviation of this repo is that when ReScript users want to share their library with JS users, the JS users don't need have ReScript toolchain installed, this makes sharing code with JS users easier (more details on that topic can be found in our [Ex
334 lines (303 loc) • 4.84 kB
JavaScript
import * as Js_vector from "./js_vector.js";
import * as Caml_option from "./caml_option.js";
function length(l) {
var _len = 0;
var _x = l;
while(true) {
var x = _x;
var len = _len;
if (!x) {
return len;
}
_x = x.tl;
_len = len + 1 | 0;
continue ;
};
}
function cons(x, xs) {
return {
hd: x,
tl: xs
};
}
function isEmpty(x) {
return x === /* [] */0;
}
function hd(x) {
if (x) {
return Caml_option.some(x.hd);
}
}
function tl(x) {
if (x) {
return x.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, _x) {
while(true) {
var x = _x;
if (!x) {
return ;
}
f(x.hd);
_x = x.tl;
continue ;
};
}
function iteri(f, l) {
var _i = 0;
var _x = l;
while(true) {
var x = _x;
var i = _i;
if (!x) {
return ;
}
f(i, x.hd);
_x = x.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, _x) {
while(true) {
var x = _x;
var acc = _acc;
if (!x) {
return acc;
}
_x = x.tl;
_acc = f(x.hd, acc);
continue ;
};
}
function foldRight(f, l, init) {
var loop = function (n, x) {
if (!x) {
return init;
}
var t = x.tl;
var h = x.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 _x = xs;
while(true) {
var x = _x;
var i = _i;
if (!x) {
return a;
}
a[i] = x.hd;
_x = x.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 ;
};
}
export {
length ,
cons ,
isEmpty ,
hd ,
tl ,
nth ,
revAppend ,
rev ,
mapRev ,
map ,
iter ,
iteri ,
foldLeft ,
foldRight ,
flatten ,
filter ,
filterMap ,
countBy ,
init ,
toVector ,
equal ,
}
/* No side effect */