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