UNPKG

monocle-ts-esm

Version:

A porting of scala monocle library to TypeScript

61 lines (60 loc) 1.81 kB
import * as O from 'fp-ts-esm/Option'; import { pipe } from 'fp-ts-esm/pipeable'; import * as RM from 'fp-ts-esm/ReadonlyMap'; import * as RS from 'fp-ts-esm/ReadonlySet'; import * as _ from './internal.js'; // ------------------------------------------------------------------------------------- // constructors // ------------------------------------------------------------------------------------- /** * @category constructors * @since 2.3.8 */ export const at = _.at; /** * Lift an instance of `At` using an `Iso`. * * @category constructors * @since 2.3.0 */ export const fromIso = (iso) => (sia) => at((i) => pipe(iso, _.isoAsLens, _.lensComposeLens(sia.at(i)))); /** * @category constructors * @since 2.3.7 */ export const atReadonlyRecord = _.atReadonlyRecord; /** * @category constructors * @since 2.3.7 */ export const atReadonlyMap = (E) => { const lookupE = RM.lookup(E); const deleteAtE = RM.deleteAt(E); const insertAtE = RM.insertAt(E); return () => at((key) => _.lens((s) => lookupE(key, s), O.fold(() => deleteAtE(key), (a) => insertAtE(key, a)))); }; /** * @category constructors * @since 2.3.7 */ export const atReadonlySet = (E) => { const elemE = RS.elem(E); const insertE = RS.insert(E); const removeE = RS.remove(E); return at((a) => { const insert = insertE(a); const remove = removeE(a); return _.lens((s) => elemE(a, s), (b) => (s) => (b ? insert(s) : remove(s))); }); }; // ------------------------------------------------------------------------------------- // deprecated // ------------------------------------------------------------------------------------- /** * Use `atReadonlyRecord` instead. * * @category constructors * @since 2.3.2 * @deprecated */ export const atRecord = _.atReadonlyRecord;