You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

31 lines
826 B

4 years ago
  1. import _curry1 from "./internal/_curry1.js";
  2. import lens from "./lens.js";
  3. import nth from "./nth.js";
  4. import update from "./update.js";
  5. /**
  6. * Returns a lens whose focus is the specified index.
  7. *
  8. * @func
  9. * @memberOf R
  10. * @since v0.14.0
  11. * @category Object
  12. * @typedefn Lens s a = Functor f => (a -> f a) -> s -> f s
  13. * @sig Number -> Lens s a
  14. * @param {Number} n
  15. * @return {Lens}
  16. * @see R.view, R.set, R.over, R.nth
  17. * @example
  18. *
  19. * const headLens = R.lensIndex(0);
  20. *
  21. * R.view(headLens, ['a', 'b', 'c']); //=> 'a'
  22. * R.set(headLens, 'x', ['a', 'b', 'c']); //=> ['x', 'b', 'c']
  23. * R.over(headLens, R.toUpper, ['a', 'b', 'c']); //=> ['A', 'b', 'c']
  24. */
  25. var lensIndex =
  26. /*#__PURE__*/
  27. _curry1(function lensIndex(n) {
  28. return lens(nth(n), update(n));
  29. });
  30. export default lensIndex;