@typed/fp
Version:
Data Structures and Resources for fp-ts
87 lines • 2.28 kB
JavaScript
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