monocle-ts-esm
Version:
A porting of scala monocle library to TypeScript
61 lines (60 loc) • 1.81 kB
JavaScript
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;