UNPKG

@fpjs/overture

Version:
38 lines (37 loc) 1.85 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.view = exports.setAll = exports.set = exports.over = exports.identity = exports.Tuple = exports.Record = exports.Indexed = void 0; var _base = require("@fpjs/overture/base"); var _functor = require("@fpjs/overture/algebras/functor"); var _identity = require("@fpjs/overture/data/identity"); var _const = require("@fpjs/overture/data/const"); const view = l => s => (0, _const.getConst)(l(_const.Const)(s)); exports.view = view; const set = l => b => s => (0, _identity.runIdentity)(l(() => (0, _identity.Identity)(b))(s)); exports.set = set; const over = l => f => s => (0, _identity.runIdentity)(l(x => (0, _identity.Identity)(f(x)))(s)); exports.over = over; const setAll = (...pairs) => pairs.reduce((acc, [l, b]) => (0, _base.compose)(set(l)(b))(acc), _base.id); exports.setAll = setAll; const identity = f => x => f(x); exports.identity = identity; const Tuple = exports.Tuple = { _1: f => ([a, ...rest]) => (0, _functor.map)(a_ => [a_, ...rest])(f(a)), _2: f => ([a, b, ...rest]) => (0, _functor.map)(b_ => [a, b_, ...rest])(f(b)), _3: f => ([a, b, c, ...rest]) => (0, _functor.map)(c_ => [a, b, c_, ...rest])(f(c)), _4: f => ([a, b, c, d, ...rest]) => (0, _functor.map)(d_ => [a, b, c, d_, ...rest])(f(d)), _5: f => ([a, b, c, d, e, ...rest]) => (0, _functor.map)(e_ => [a, b, c, d, e_, ...rest])(f(e)) }; const makeLensFor = fieldName => f => s => (0, _functor.map)(x => ({ ...s, [fieldName]: x }))(f(s[fieldName])); const RecordFields = l => new Proxy(l, { get: (target, prop) => RecordFields((0, _base.compose)(target)(makeLensFor(prop))) }); const Record = exports.Record = RecordFields(identity); const Indexed = exports.Indexed = { ix: n => f => xs => (0, _functor.map)(y => [...xs.slice(0, n), y, ...xs.slice(n + 1)])(f(xs[n])) };