UNPKG

@typed/fp

Version:

Data Structures and Resources for fp-ts

89 lines 2.38 kB
import * as RM from 'fp-ts/ReadonlyMap'; import { fst, snd } from 'fp-ts/Tuple2'; import * as E from './Env'; import * as EO from './EnvOption'; import { flow, pipe } from './function'; /** * @since 0.12.0 * @category Combinator */ export const deleteAt = (Eq) => { return (key) => { const deleteAtKey = RM.deleteAt(Eq)(key); return (rm) => pipe(rm.get, E.map(deleteAtKey), EO.chainFirstEnvK(rm.set)); }; }; /** * @since 0.12.0 * @category Combinator */ export function filter(predicate) { return (rm) => rm.update(flow(RM.filter(predicate), E.of)); } /** * @since 0.12.0 * @category Combinator */ export function filterWithIndex(predicate) { return (rm) => rm.update(flow(RM.filterWithIndex(predicate), E.of)); } /** * @since 0.12.0 * @category Combinator */ export const insertAt = (Eq) => { return (key, value) => { const insertAtKey = RM.insertAt(Eq)(key, value); return (rm) => pipe(rm.get, E.map(insertAtKey), EO.chainFirstEnvK(rm.set)); }; }; /** * @since 0.12.0 * @category Combinator */ export const modifyAt = (Eq) => { return (key, f) => { const modifyAtKey = RM.modifyAt(Eq)(key, f); return (rm) => pipe(rm.get, E.map(modifyAtKey), EO.chainFirstEnvK(rm.set)); }; }; /** * @since 0.12.0 * @category Combinator */ export const pop = (Eq) => (k) => { const popWithKey = RM.pop(Eq)(k); return (rm) => pipe(rm.get, E.map(popWithKey), EO.chainFirstEnvK(flow(snd, rm.set)), EO.map(fst)); }; /** * @since 0.12.0 * @category Combinator */ export const updateAt = (Eq) => { return (key, value) => { const updateAtKey = RM.updateAt(Eq)(key, value); return (rm) => pipe(rm.get, E.map(updateAtKey), EO.chainFirstEnvK(rm.set)); }; }; /** * @since 0.12.0 * @category Combinator */ export const upsertAt = (Eq) => { return (key, value) => { const upsertAtKey = RM.upsertAt(Eq)(key, value); return (rm) => rm.update(flow(upsertAtKey, E.of)); }; }; /** * @since 0.12.1 * @category Combinator */ export const getOrCreate = (Eq) => { return (key, create) => { const lookup = RM.lookup(Eq)(key); const upsert = upsertAt(Eq); return (rm) => pipe(rm.get, E.map(lookup), EO.matchEW(() => pipe(create, E.chainFirstW((v) => pipe(rm, upsert(key, v)))), E.of)); }; }; //# sourceMappingURL=RefMap.js.map