derw
Version:
An Elm-inspired language that transpiles to TypeScript
83 lines (82 loc) • 1.96 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.emptyList = void 0;
exports.map = map;
exports.indexedMap = indexedMap;
exports.filter = filter;
exports.foldl = foldl;
exports.statefulFold = statefulFold;
exports.foldr = foldr;
exports.filterMap = filterMap;
exports.append = append;
exports.reverse = reverse;
exports.length = length;
exports.take = take;
exports.drop = drop;
exports.sort = sort;
exports.sortBy = sortBy;
const List_kernel_1 = require("./List_kernel");
const emptyList = [];
exports.emptyList = emptyList;
function map(fn, xs) {
return xs.map(fn);
}
function indexedMap(fn, xs) {
return xs.map(fn);
}
function filter(fn, xs) {
return xs.filter(fn);
}
function foldl(fn, init, xs) {
return xs.reduce(function (a, b) {
return fn(b, a);
}, init);
}
function statefulFold(fn, init, xs) {
return (0, List_kernel_1.kernelStatefulFold)(fn, init, xs);
}
function foldr(fn, init, xs) {
return xs.reduceRight(function (a, b) {
return fn(b, a);
}, init);
}
function filterMapHelp(fn, a, xs) {
const maybe = fn(a);
switch (maybe.kind) {
case "Just": {
const { value } = maybe;
return append(xs, [value]);
}
case "Nothing": {
return xs;
}
}
}
function filterMap(fn, xs) {
return foldl(function (y, ys) {
return filterMapHelp(fn, y, ys);
}, [], xs);
}
function append(xs, ys) {
return (function (x) {
return x.concat(xs, ys);
})((0, List_kernel_1.kernelEmptyList)());
}
function reverse(xs) {
return xs.slice().reverse();
}
function length(xs) {
return (0, List_kernel_1.kernelLength)(xs);
}
function take(n, xs) {
return xs.slice(0, n);
}
function drop(n, xs) {
return xs.slice(n, xs.length);
}
function sort(xs) {
return (0, List_kernel_1.kernelSort)(xs);
}
function sortBy(fn, xs) {
return (0, List_kernel_1.kernelSortBy)(fn, xs);
}