UNPKG

@typed/fp

Version:

Data Structures and Resources for fp-ts

87 lines 2.28 kB
import * as O from 'fp-ts/Option'; import * as E from './Env'; import * as EO from './EnvOption'; import { pipe } from './function'; /** * @since 0.13.4 * @category Combinator */ export const deleteAt = (key) => (rm) => pipe(rm.get, E.tap((m) => m.delete(key)), E.chainFirstW(rm.set)); /** * @since 0.13.4 * @category Combinator */ export function filter(predicate) { return (rm) => rm.update((m) => { m.forEach((value, key) => { if (!predicate(value)) { m.delete(key); } }); return E.of(m); }); } /** * @since 0.13.4 * @category Combinator */ export function filterWithIndex(predicate) { return (rm) => rm.update((m) => { m.forEach((value, key) => { if (!predicate(key, value)) { m.delete(key); } }); return E.of(m); }); } /** * @since 0.13.4 * @category Combinator */ export const insertAt = (key, value) => (rm) => pipe(rm.get, E.chainW((map) => E.fromIO(() => { if (map.has(key)) { return O.none; } map.set(key, value); return O.some(map); })), EO.chainFirstEnvK(rm.set)); /** * @since 0.13.4 * @category Combinator */ export const modifyAt = (key, f) => { return (rm) => pipe(rm.get, E.chainW((map) => E.fromIO(() => { if (!map.has(key)) { return O.none; } const v = map.get(key); return O.some(map.set(key, f(v))); })), EO.chainFirstEnvK(rm.set)); }; /** * @since 0.13.4 * @category Combinator */ export const updateAt = (key, value) => { return (rm) => pipe(rm.get, E.chainW((map) => E.fromIO(() => { if (!map.has(key)) { return O.none; } return O.some(map.set(key, value)); })), EO.chainFirstEnvK(rm.set)); }; /** * @since 0.13.4 * @category Combinator */ export const upsertAt = (key, value) => (rm) => rm.update((map) => E.fromIO(() => { map.set(key, value); return map; })); /** * @since 0.13.4 * @category Combinator */ export const getOrCreate = (key, create) => (rm) => pipe(rm.get, E.map((map) => (map.has(key) ? O.some(map.get(key)) : O.none)), EO.matchEW(() => pipe(create, E.chainFirstW((v) => pipe(rm, upsertAt(key, v)))), E.of)); //# sourceMappingURL=RefMapM.js.map