UNPKG

rescript

Version:
334 lines (303 loc) 5.02 kB
import * as Js_vector from "./js_vector.js"; import * as Caml_option from "./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 ; }; } 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 */