47 lines
1.2 KiB
JavaScript
47 lines
1.2 KiB
JavaScript
|
import _curry3 from "./internal/_curry3.js"; // `Identity` is a functor that holds a single value, where `map` simply
|
||
|
// transforms the held value with the provided function.
|
||
|
|
||
|
var Identity = function (x) {
|
||
|
return {
|
||
|
value: x,
|
||
|
map: function (f) {
|
||
|
return Identity(f(x));
|
||
|
}
|
||
|
};
|
||
|
};
|
||
|
/**
|
||
|
* Returns the result of "setting" the portion of the given data structure
|
||
|
* focused by the given lens to the result of applying the given function to
|
||
|
* the focused value.
|
||
|
*
|
||
|
* @func
|
||
|
* @memberOf R
|
||
|
* @since v0.16.0
|
||
|
* @category Object
|
||
|
* @typedefn Lens s a = Functor f => (a -> f a) -> s -> f s
|
||
|
* @sig Lens s a -> (a -> a) -> s -> s
|
||
|
* @param {Lens} lens
|
||
|
* @param {*} v
|
||
|
* @param {*} x
|
||
|
* @return {*}
|
||
|
* @see R.prop, R.lensIndex, R.lensProp
|
||
|
* @example
|
||
|
*
|
||
|
* const headLens = R.lensIndex(0);
|
||
|
*
|
||
|
* R.over(headLens, R.toUpper, ['foo', 'bar', 'baz']); //=> ['FOO', 'bar', 'baz']
|
||
|
*/
|
||
|
|
||
|
|
||
|
var over =
|
||
|
/*#__PURE__*/
|
||
|
_curry3(function over(lens, f, x) {
|
||
|
// The value returned by the getter function is first transformed with `f`,
|
||
|
// then set as the value of an `Identity`. This is then mapped over with the
|
||
|
// setter function of the lens.
|
||
|
return lens(function (y) {
|
||
|
return Identity(f(y));
|
||
|
})(x).value;
|
||
|
});
|
||
|
|
||
|
export default over;
|