import curry2 from "../function/curry2";
export const lensSymbol = Symbol("lensSymbol");
/**
* Takes a set of getter/setter functions
* and wraps them in a lens object, that focuses on a specific part of a larger data object.
* The lens should be used with the `view`, `set` and `over` functions.
* The lens should not be used on its own
* as its internal implementation should be treated as a black box.
*
* The getter and setter functions should not modify the original data object.
* The getter should be a unary function with the data as its only argument.
* The setter function should be a binary function that receives the new value as its first argument
* and the data object as its second argument.
*
* @param {function} getter
* @param {function} setter
* @returns {object}
* @see view
* @see set
* @see over
*/
const lens = (getter, setter) => ({
[lensSymbol]: {
getter,
setter,
},
});
export default curry2(lens);